深入理解原型链的本质

原型链是作为实现继承的主要方法,基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。
实现原型链的代码如下:

function Super() {
    this.property = true;
}
Super.prototype.getSuperValue = function() {
    return this.property;
};
function Sub() {
    this.subproperty = false;
}
//继承了Super
Sub.prototype = new Super();
Sub.prototype.getSubValue = function() {
    return this.subproperty;
};

var instance = new Sub();
alert(instance.getSuperValue()); //true

实例以及构造函数和原型之间的关系如下如:
这里写图片描述

上面的代码中,没有使用Sub默认的原型,而是给它换了个新原型,就是Super的实例。新原型不仅具有作为一个Super的实例所拥有的全部属性和方法,而且其内部还有一个指针,指向了Super的原型。最终的结果就是:instance指向Sub的原型,Sub的原型又指向Super的原型。getSuperValue()方法仍然还在Super.prototype中,但property则位于Sub.prototype中。这是因为property是一个实例属性,而getSuperValue()则是一个原型方法。既然Sub.prototype现在是Super的实例,那么property当然就位于该实例中。要注意instance.constructor现在指向的是Super,这是因为Sub.prototype中的constructor被重写了。

由于所有引用类型默认都继承了Object,因此如下图:
这里写图片描述

一句话:Sub继承了Super,Super继承了Object,调用instance.toString实际上调用的是保存在Object.prototype中的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值