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

js中的原形链继承机制

2015-10-26 15:42 405 查看
js中的继承机制采用原型链来实现的。

在js中,创造js新函数后(function super(){}),js就会根据特定的规则为该函数创造一个prototype属性,该属性指向该函数的原型对象(super prototype),而在这个原型对象中,存在属性constructor有反向指向创建的函数,因此存在等式:

super.prototype.constructor=super


之后,我们在创建super的实例后

var instance=new super();


这个实例中的会产生一个
[[prototype]]
的指针,该属性是个隐藏属性,但是在主流浏览器中可以使用“proto”来表示。该指针由实例指向原型对象,即存在等式:
super.prototype=instance._proto_


而我们所说的原型链就是这个
[[prototype]]
产生的继承机制的链条。

当我们想要产生继承关系的时候:

function fu(){
this.name="Toe";
this.age=12;
}
function zi(){
this.gender="male";
}
zi=new fu();
var instance=new zi();
console.log(instance.name,instance.age,instance.gender);//toe 12 male


代码中的zi继承了fu中的所有属性,同时也拥有自己的属性,当建立zi的实例对象instance时,instance指向zi的原型对象,而同时,zi的原型对象中的proto 属性又指向fu的原型对象,所以当请求instance.name 时:首先会先从zi的prototype中寻找相应的属性,如果存在则停止寻找,若不存在则按照原形链向上寻找,直至到原形链的顶端为止。

而且,曾经在fu中的实例属性,通过zi继承之后,该属性会位于 zi 的原型对象之中,图解如下所示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript 对象 继承