1.传统形式:原型链
Grand.prototype.lastname="zzz" function Grand(){} var grand= new Grand(); Father.prototype=grand function Father(){ this.name='ddd' } var father=new Father(); Son.prototype=Father(); function Son(){} var son=new Son();
过多的继承了没用的属性
2.借用构造函数
function Person(name,age,sex){ this.name=name; this.age=age this.sex=sex; } function Student(name,age,sex,grade){ Person.call(this,name,age,sex); this.grade=grade; } var student =Student()
不能继承借用构造函数的原型
每次构造函数都要多走一个函数
3.共享原型
Father.prototype.LastName="zzz" function Father(){} function Son(){} function inherit(Target,Origin){ Target.prototype=Origin.prototype } inherit(Son,Father); var son=new Son()
不能随便改自己的原型
4圣杯模式
function inherit(Target,Origin){ function F(){}; F.prototype=Origin.prototype; Target.prototype=new F(); Target.prototype.constructor=Target;//改变构造函数为自己 Target.prototype.uber=Origin.prototype;//可有可无(希望知道自己真正继承自谁) } Father.prototype.LastName="Deng"; function Father(){ } function Son(){ } inherit(Son,Father); var son = new Son(); var father = new Father();