javascript继承之寄生组合式继承(六)

通过借用构造函数来击沉属性,通过原型链的混成形式来继承方法。
不必为了指定子类型的原型而调用超类型的构造函数,我们只是需要一个超类型的副本。实际上是来继承超类型的原型,然后将结果指定给子类型的原型。

  • 基本模式
function inheritPrototype(subType,superType){
    // 创建一个超类的副本
    var prototype = Object.create(superType.prototype);
    
    // 为副本添加构造函数指向
    prototype.constructor = subType;

    // 将副本赋值给子类的原型
    subType.prototype = prototype;
}
  • 创建一个超类函数
unction Car(color){
    this.color = color;
    this.colorArray = ["黑色","白色","红色","蓝色"]
}

Car.prototype.getMessage = function(){
    console.log(this.color);
}
  • 创建一个子类函数
function Audi(color,year){
    Car.call(this,color);
    this.year = year;
}
  • 使用寄生继承
inheritPrototype(Audi,Car);
Audi.prototype.sayYear = function(){
    console.log(this.year);
}
  • 实例继承测试
var car1 = new Audi("黑色","2015");
car1.sayYear(); // 2015
console.log(car1.colorArray);// [ '黑色', '白色', '红色', '蓝色' ]

你可能感兴趣的:(javascript继承之寄生组合式继承(六))