JavaScript 继承---寄生组合式继承
2017-12-23 15:01
423 查看
继承---寄生组合式继承
寄生组合式继承指的是:通过借用构造函数来继承属性,通过原型链的混合形式来继承方法。其背后的基本思路是:不必
为了指定子类型的原型而调用超类型的构造函数,我们需要的只是超类型原型的一个副本。本质上,就是使用寄生式继承来
继承超类型的原型。
寄生组合式继承的基本模式如例1所示:
例1:
function inheritPrototype(subType,superType){
var prototype=Object(superType.prototype);
//创建对象
prototype.constructor=subType;
//增强对象,将constructor更改为默认的属性
subType.prototype=prototype;
//指定对象
}
在例1中,inheritPrototype( )函数实现了寄生组合式继承的最简单形式。因此,我们可以调用该函数替换之前的为子类型原型
赋值的语句。结合以下例2来说明:
例2:
function inheritPrototype(subType,superType){
var prototype=Object(superType.prototype);
//创建对象
prototype.constructor=subType;
//增强对象
subType.prototype=prototype;
//指定对象
}
function SuperType(name){
this.name=name;
this.colors=["red","green","blue"];
}
SuperType.prototype.sayName=function(){
alert(this.name);
}
function SubType(name,age){
SuperType.call(this,name);
this.age=age;
}
inheritPrototype(SubType,SuperType);
SubType.prototype.sayAge=function(){
alert(this.age);
}
var aaa=new SubType("Tom","40");
alert(aaa.name);
//Tom
alert(aaa.age);
//40
aaa.sayName();
//Tom
aaa.sayAge();
//40
alert(aaa.colors);
//red,green,blue
由例2所示,aaa继承了两个函数的所有属性和方法,因此可以传递参数和显示调用两个函数的所有属性和方法。
例2中的高效率体现在它只调用了一次SuperType构造函数,并且因此避免了Subtype.prototype上面创建比不要的,
多余的属性。与此同时,原型链还能保持不变。因此,还能正常使用instanceof( )和isPrototypeOf( )方法。
寄生组合式继承指的是:通过借用构造函数来继承属性,通过原型链的混合形式来继承方法。其背后的基本思路是:不必
为了指定子类型的原型而调用超类型的构造函数,我们需要的只是超类型原型的一个副本。本质上,就是使用寄生式继承来
继承超类型的原型。
寄生组合式继承的基本模式如例1所示:
例1:
function inheritPrototype(subType,superType){
var prototype=Object(superType.prototype);
//创建对象
prototype.constructor=subType;
//增强对象,将constructor更改为默认的属性
subType.prototype=prototype;
//指定对象
}
在例1中,inheritPrototype( )函数实现了寄生组合式继承的最简单形式。因此,我们可以调用该函数替换之前的为子类型原型
赋值的语句。结合以下例2来说明:
例2:
function inheritPrototype(subType,superType){
var prototype=Object(superType.prototype);
//创建对象
prototype.constructor=subType;
//增强对象
subType.prototype=prototype;
//指定对象
}
function SuperType(name){
this.name=name;
this.colors=["red","green","blue"];
}
SuperType.prototype.sayName=function(){
alert(this.name);
}
function SubType(name,age){
SuperType.call(this,name);
this.age=age;
}
inheritPrototype(SubType,SuperType);
SubType.prototype.sayAge=function(){
alert(this.age);
}
var aaa=new SubType("Tom","40");
alert(aaa.name);
//Tom
alert(aaa.age);
//40
aaa.sayName();
//Tom
aaa.sayAge();
//40
alert(aaa.colors);
//red,green,blue
由例2所示,aaa继承了两个函数的所有属性和方法,因此可以传递参数和显示调用两个函数的所有属性和方法。
例2中的高效率体现在它只调用了一次SuperType构造函数,并且因此避免了Subtype.prototype上面创建比不要的,
多余的属性。与此同时,原型链还能保持不变。因此,还能正常使用instanceof( )和isPrototypeOf( )方法。
相关文章推荐
- [javascript高手之路]寄生组合式继承的优势
- [javascript]寄生组合式继承
- JS学习笔记——JavaScript继承的6种方法(原型链、借用构造函数、组合、原型式、寄生式、寄生组合式)
- JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
- JavaScript中寄生组合式继承的理解
- javascript中寄生组合式继承
- JavaScript的寄生组合式继承
- JavaScript寄生组合式继承分析
- javascript中的继承-寄生组合式继承
- JavaScript高级程序设计之面向对象的程序设计之继承之寄生组合式继承第6.3.6讲笔记
- javascript 寄生组合式继承
- javascript 寄生组合式继承
- JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
- 寄生组合式继承——《Javascript 高级程序设计》6.3.6
- 【JavaScript】理解所谓的‘寄生组合式继承’
- JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
- javascript 的 继承(六) 之 寄生组合式继承
- 【代码整理】JavaScript的寄生组合式继承
- 【JavaScript】6.3.6寄生组合式继承