JavaScript高级程序设计第六章
1,通过原型链实现
基本思想:通过原型链让一个引用类型继承另一个引用类型的属性和方法
实现思路:将父类的实例赋给子类的原型
关键代码:SubType.prototype=new SuperType();
问题:父类实例属性变为子类的原型属性
2,借用构造函数
基本思想:在子类构造器中调用父类的构造器
关键代码:
function SubType(args){
SuperType.call(this, arg);
//其他属性和方法
}
问题:无法继承父类的原型方法和属性;子类方法无法复用
3,组合继承
基本思想:结合以上两种方式:通过原型链实现对原型属性和方法的继承,通过构造器实现对实例属性和方法的继承。
问题:父类的属性和方法即存在于子类的原型中,又存在于子类的实例中。
4,原型式继承
基本思想:借用已有的对象创建新的对象
代码:
function object(o){
function F();
F.prototype=o;
return new F();
}
5,寄生式继承
基本思想:增强原型式继承
代码:
function createAnother(o){
var clone = object(o);
clone.doSomething(){}//增强
return clone;
}
6,寄生式组合继承
基本思路:将构造器继承和寄生式继承组合
完整代码:
function object(o){
function F();
F.prototype=o;
return new F();
}
function inheritPrototype(superType,subType){
var clone = object(superType.prototype);
subType.construct = subType;
subTypr.prototype = clone;
}
//属性方法和参数略去
function SuperType(){}
function SubType(){
SuperType.call(this) //利用构造器
}
inheritPrototype(SuperType,SubType)