JavaScript 继承---寄生组合式继承

继承---寄生组合式继承


寄生组合式继承指的是:通过借用构造函数来继承属性,通过原型链的混合形式来继承方法。其背后的基本思路是:不必


为了指定子类型的原型而调用超类型的构造函数,我们需要的只是超类型原型的一个副本。本质上,就是使用寄生式继承来


继承超类型的原型。



寄生组合式继承的基本模式如例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( )方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值