JavaScript

超轻量级php框架startmvc

JavaScript寄生组合式继承原理与用法分析

更新时间:2020-08-11 19:42:01 作者:startmvc
本文实例讲述了JavaScript寄生组合式继承。分享给大家供大家参考,具体如下:寄生组合式

本文实例讲述了JavaScript寄生组合式继承。分享给大家供大家参考,具体如下:

寄生组合式继承

寄生组合式继承,就是通过伪造对象来继承属性,通过原型链的混成形式来继承方法。

这种技术的基本思路是:不必为了指定子类型的原型而调用超类型的构造函数,因为我们所需要的只是超类型原型的一个副本而已(这一点正是组合继承的问题,并且正是JavaScript这种原型式语言的强大之处,直接copy对象-原型对象)。本质上,就是使用寄生式继承来继承超类型的原型,然后再将结果指定给子类型的原型。


function inheritPrototype(subType, superType){
 var prototype = Object.create(superType.prototype); //创建超类型原型副本
 prototype.constructor = subType; //修改原型副本的不同属性
 subType.prototype = prototype; //指定原型
}
function SuperType(name){
 this.name = name;
 this.colors = ["red", "blue", "green"];
}
SuperType.prototype.sayName = function(){
 console.log(this.name);
}
function SubType(name, age){
 //继承属性
 SuperType.call(this, name);
 //实例属性
 this.age = age;
}
//继承方法
inheritPrototype(SubType, SuperType);
SubType.prototype.sayAge = function(){
 console.log(this.age);
};
var instance1 = new SubType("Nicholas", 29);
instance1.colors.push("black");
console.log(instance1.colors); //"red, blue, green, black"
instance1.sayName(); //"Nicholas"
instance1.sayAge(); //29

这里使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码,可得如下运行结果:

这个是寄生组合式继承的最简单形式。这个函数接收两个参数:

1. 子类型构造函数 2. 超类型构造函数

在函数内部,寄生组合式继承最简形式分为3个步骤:

1. 创建超类型原型副本; 2. 为创建的副本指定constructor属性,从而弥补因为重写SubType原型而失去的默认的constructor属性,这个原型副本的constructor属性变化:SuperType –> SubType; 3. 将该完善好的副本赋值给子类型的原型。

寄生组合式继承的图解如下:

寄生组合式继承的高效率体现在它只调用了一次SuperType构造函数,并且因此避免了在SubType.prototype上面创建不必要的,多余的属性。与此同时,原型链还能保持不变。

JavaScript 寄生组合式继承