通过借用构造函数来击沉属性,通过原型链的混成形式来继承方法。
不必为了指定子类型的原型而调用超类型的构造函数,我们只是需要一个超类型的副本。实际上是来继承超类型的原型,然后将结果指定给子类型的原型。
- 基本模式
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);// [ '黑色', '白色', '红色', '蓝色' ]