js原型鏈原理看圖說明
更新時間:2012年07月07日 16:53:22 作者:
任何一個對象都有一個prototype的屬性,在js中可以把它記為:__proto__
當初ECMAscript的發(fā)明者為了簡化這門語言,同時又保持繼承的屬性,于是就設計了這個鏈表。。
在數(shù)據(jù)結(jié)構(gòu)中學過鏈表不,鏈表中有一個位置相當于指針,指向下一個結(jié)構(gòu)體。
于是乎__proto__也一樣,每當你去定義一個prototype的時候,相當于把該實例的__proto__指向一個結(jié)構(gòu)體,那么這個被指向結(jié)構(gòu)體就稱為該實例的原型。
文字說起來有點兒繞,看圖說話
var foo = {
x: 10,
y: 20
};
當我不指定__proto__的時候,foo也會預留一個這樣的屬性,
如果有明確的指向,那么這個鏈表就鏈起來啦。
很明顯,下圖中b和c共享a的屬性和方法,同時又有自己的私有屬性。
__proto__默認的也有指向。它指向的是最高級的object.prototype,而object.prototype的__proto__為空。
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
理解了__proto__這個屬性鏈接指針的本質(zhì)。。再來理解constructor。
當定義一個prototype的時候,會構(gòu)造一個原形對象,這個原型對象存儲于構(gòu)造這個prototype的函數(shù)的原形方法之中.
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));
http://dmitrysoshnikov.com/ecmascript/javascript-the-core/
在數(shù)據(jù)結(jié)構(gòu)中學過鏈表不,鏈表中有一個位置相當于指針,指向下一個結(jié)構(gòu)體。
于是乎__proto__也一樣,每當你去定義一個prototype的時候,相當于把該實例的__proto__指向一個結(jié)構(gòu)體,那么這個被指向結(jié)構(gòu)體就稱為該實例的原型。
文字說起來有點兒繞,看圖說話
復制代碼 代碼如下:
var foo = {
x: 10,
y: 20
};
當我不指定__proto__的時候,foo也會預留一個這樣的屬性,
如果有明確的指向,那么這個鏈表就鏈起來啦。
很明顯,下圖中b和c共享a的屬性和方法,同時又有自己的私有屬性。
__proto__默認的也有指向。它指向的是最高級的object.prototype,而object.prototype的__proto__為空。
復制代碼 代碼如下:
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
理解了__proto__這個屬性鏈接指針的本質(zhì)。。再來理解constructor。
當定義一個prototype的時候,會構(gòu)造一個原形對象,這個原型對象存儲于構(gòu)造這個prototype的函數(shù)的原形方法之中.
復制代碼 代碼如下:
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));
http://dmitrysoshnikov.com/ecmascript/javascript-the-core/
相關文章
javascript 操作Word和Excel的實現(xiàn)代碼
javascript 操作Word和Excel的實現(xiàn)代碼, 需要的朋友可以參考下。2009-10-10JavaScript中將值轉(zhuǎn)換為字符串的五種方法總結(jié)
這篇文章主要給大家總結(jié)介紹了關于JavaScript中將值轉(zhuǎn)換為字符串的五種方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用JavaScript具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-06-06在Webpack中用url-loader處理圖片和字體的問題
這篇文章主要介紹了在Webpack中用url-loader處理圖片和字體的問題及解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04