js中的原形链继承机制

来源:互联网 发布:linux开机no such file 编辑:程序博客网 时间:2024/06/05 09:42

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 的原型对象之中,图解如下所示:
这里写图片描述

1 0
原创粉丝点击