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

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

  • 基本模式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function inheritPrototype(subType,superType){
    // 创建一个超类的副本
    var prototype = Object.create(superType.prototype);

    // 为副本添加构造函数指向
    prototype.constructor = subType;

    // 将副本赋值给子类的原型
    subType.prototype = prototype;
    }
  • 创建一个超类函数

    1
    2
    3
    4
    5
    6
    7
    8
    unction Car(color){
    this.color = color;
    this.colorArray = ["黑色","白色","红色","蓝色"]
    }

    Car.prototype.getMessage = function(){
    console.log(this.color);
    }
  • 创建一个子类函数

    1
    2
    3
    4
    function Audi(color,year){
    Car.call(this,color);
    this.year = year;
    }
  • 使用寄生继承

    1
    inheritPrototype(Audi,Car);
1
2
3
Audi.prototype.sayYear = function(){
console.log(this.year);
}
  • 实例继承测试
    1
    2
    3
    var car1 = new Audi("黑色","2015");
    car1.sayYear(); // 2015
    console.log(car1.colorArray);// [ '黑色', '白色', '红色', '蓝色' ]