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

理解JavaScript的prototype屬性

 更新時(shí)間:2012年02月11日 23:30:16   作者:  
JavaScript可以說(shuō)是最讓人初學(xué)者難以理解的單一屬性。我看了一些資料后,開(kāi)始明白其實(shí)這些困難很大程度來(lái)自prototype這個(gè)名字本身的二義性
其實(shí),關(guān)于prototype只要幾句話就可以總結(jié):
任何原型都是對(duì)象,只有對(duì)象有原型
只有Function有prototype屬性,它是這個(gè)Function作為構(gòu)造器時(shí)生成對(duì)象所繼承的原型。Function的原型和它的prototype屬性無(wú)關(guān)
對(duì)象的原型可以通過(guò)非標(biāo)準(zhǔn)的屬性 __proto__ 或ECMAScript5的方法 Object.getPrototypeOf() 訪問(wèn)。
1其實(shí)是錯(cuò)的,Object這個(gè)原型鏈盡頭的對(duì)象它沒(méi)有原型??墒菫榱烁?jiǎn)單表述。在看原型鏈后你就會(huì)明白.toString()這類(lèi)沒(méi)有定義過(guò)的方法是怎樣來(lái)的。
上面說(shuō)的二義性,是文字理解上的,語(yǔ)法本身沒(méi)有歧義。prototype是原型的意思,可是一個(gè)對(duì)象的原型不是由prototype去訪問(wèn)。
Function有prototype屬性,可是和自己的原型沒(méi)有關(guān)系。理解這點(diǎn)后,再去看關(guān)于原型鏈、繼承的文章就容易理解多了。

下面是些例子,可以加深認(rèn)識(shí):
復(fù)制代碼 代碼如下:

// 任何對(duì)象都有原型
obj = {};
console.log( obj.__proto__ );
console.log( Object.getPrototypeOf(obj) );
console.log( obj.__proto__ === Object.getPrototypeOf(obj) );

//對(duì)象并沒(méi)有語(yǔ)法意義的prototype屬性
alert(obj.prototype) //undefined

//prototype作為一個(gè)屬性,僅存在于Function中,代表以這個(gè)Function創(chuàng)建的新實(shí)例集成的原型,和Function本身的原型無(wú)關(guān)
var F = function(name){
this.name = name;
}
obj = {a:3,
get b (){
return this.a;
}
};
F.prototype = obj;
newObj = new F('new name');
newObj.name; //作為構(gòu)造器,name是newObj的自身屬性
newObj.a; //3
//它繼承了obj??梢酝ㄟ^(guò)這樣證實(shí):
Object.getPrototypeOf( newObj ) === obj; // true
newObj.__proto__ === obj; //true

相關(guān)文章

最新評(píng)論