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

js原型链原理看图说话

2012-07-07 11:49 260 查看
任何一个对象都有一个prototype的属性,在js中可以把它记为:__proto__

当初ECMAscript的发明者为了简化这门语言,同时又保持继承的属性,于是就设计了这个链表。。

在数据结构中学过链表不,链表中有一个位置相当于指针,指向下一个结构体。

于是乎__proto__也一样,每当你去定义一个prototype的时候,相当于把该实例的__proto__指向一个结构体,那么这个被指向结构体就称为该实例的原型。

文字说起来有点儿绕,看图说话

varfoo={
x:10,
y:20
};




当我不指定__proto__的时候,foo也会预留一个这样的属性,

如果有明确的指向,那么这个链表就链起来啦。

很明显,下图中b和c共享a的属性和方法,同时又有自己的私有属性。



理解了__proto__这个属性链接指针的本质。。再来理解constructor。

当定义一个prototype的时候,会构造一个原形对象,这个原型对象存储于构造这个prototype的函数的原形方法之中.

functionFoo(y){
this.y=y;
}

Foo.prototype.x=10;

Foo.prototype.calculate=function(z){
returnthis.x+this.y+z;
};

varb=newFoo(20);
varc=newFoo(50);

alert(b.calculate(30));//60

alert(c.calculate(50));//80





【参考文档】

http://dmitrysoshnikov.com/ecmascript/javascript-the-core/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: