欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js原型鏈原理看圖說(shuō)明

 更新時(shí)間:2012年07月07日 16:53:22   作者:  
任何一個(gè)對(duì)象都有一個(gè)prototype的屬性,在js中可以把它記為:__proto__
當(dāng)初ECMAscript的發(fā)明者為了簡(jiǎn)化這門語(yǔ)言,同時(shí)又保持繼承的屬性,于是就設(shè)計(jì)了這個(gè)鏈表。。
在數(shù)據(jù)結(jié)構(gòu)中學(xué)過(guò)鏈表不,鏈表中有一個(gè)位置相當(dāng)于指針,指向下一個(gè)結(jié)構(gòu)體。

于是乎__proto__也一樣,每當(dāng)你去定義一個(gè)prototype的時(shí)候,相當(dāng)于把該實(shí)例的__proto__指向一個(gè)結(jié)構(gòu)體,那么這個(gè)被指向結(jié)構(gòu)體就稱為該實(shí)例的原型。

文字說(shuō)起來(lái)有點(diǎn)兒繞,看圖說(shuō)話
復(fù)制代碼 代碼如下:

var foo = {
x: 10,
y: 20
};

Figure 1. A basic object with a prototype.


當(dāng)我不指定__proto__的時(shí)候,foo也會(huì)預(yù)留一個(gè)這樣的屬性,

如果有明確的指向,那么這個(gè)鏈表就鏈起來(lái)啦。

很明顯,下圖中b和c共享a的屬性和方法,同時(shí)又有自己的私有屬性。

__proto__默認(rèn)的也有指向。它指向的是最高級(jí)的object.prototype,而object.prototype的__proto__為空。
復(fù)制代碼 代碼如下:

var a = {
x: 10,
calculate: function (z) {
return this.x + this.y + z
}
};
var b = {
y: 20,
__proto__: a
};

var c = {
y: 30,
__proto__: a
};

// call the inherited method
b.calculate(30); // 60

Figure 2. A prototype chain.


理解了__proto__這個(gè)屬性鏈接指針的本質(zhì)。。再來(lái)理解constructor。

當(dāng)定義一個(gè)prototype的時(shí)候,會(huì)構(gòu)造一個(gè)原形對(duì)象,這個(gè)原型對(duì)象存儲(chǔ)于構(gòu)造這個(gè)prototype的函數(shù)的原形方法之中.
復(fù)制代碼 代碼如下:

function Foo(y){
this.y = y ;
}

Foo.prototype.x = 10;

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

var b = new Foo(20);

alert(b.calculate(30));

Figure 3. A constructor and objects relationship.

【參考文檔】

http://dmitrysoshnikov.com/ecmascript/javascript-the-core/

相關(guān)文章

最新評(píng)論