您的位置:首页 > Web前端 > JavaScript

深入理解原型链的本质

2016-06-29 15:55 671 查看
原型链是作为实现继承的主要方法,基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。

实现原型链的代码如下:

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中的方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JavaScript