原型链继承

原型链(前置知识:原型对象,构造函数):

    每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。那么,如果让原型对象等于另一个类型的实例,此时的原型对象将包含一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另一个构造函数的指针。假如另一个原型又是另一个类型的实例,以上关系依然成立,如此层层递进就构成了实例与原型的链条。就是所谓的原型链。

    听起来很拗口……

    基本模式如下:

function SuperType(){
    this.propery = true;
}
SuperType.propertytype.getSuerValue = function(){
    return this.property;
};
function SubType(){
    this.subproperty = flase;
}
//继承了SuperType
SubType.prototype = new SuperType();
SubType.prototype.getSubValue = function(){
    return this.subproperty;
};
var instance = new SubType();
alert(instance.getSuperValue()); //true

下图的表示方法更容易理解:


原型链实现继承虽然强大,但也存在问题:最主要的问题来自包含引用类型值的原型,通过原型链实现继承时,原型实际上会变成另一个类型的实例,于是,原先的实例属性也就变成了现在的原型属性了。第二个问题是在创建子类型的实例时,不能在不影响所有对象实例的情况下向超类型的构造函数中传递参数。

实际中很少单独使用原型链,而是结合其他继承方式实现继承。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值