理解JavaScript的prototype屬性
更新時(shí)間:2012年02月11日 23:30:16 作者:
JavaScript可以說是最讓人初學(xué)者難以理解的單一屬性。我看了一些資料后,開始明白其實(shí)這些困難很大程度來自prototype這個(gè)名字本身的二義性
其實(shí),關(guān)于prototype只要幾句話就可以總結(jié):
任何原型都是對(duì)象,只有對(duì)象有原型
只有Function有prototype屬性,它是這個(gè)Function作為構(gòu)造器時(shí)生成對(duì)象所繼承的原型。Function的原型和它的prototype屬性無關(guān)
對(duì)象的原型可以通過非標(biāo)準(zhǔn)的屬性 __proto__ 或ECMAScript5的方法 Object.getPrototypeOf() 訪問。
1其實(shí)是錯(cuò)的,Object這個(gè)原型鏈盡頭的對(duì)象它沒有原型??墒菫榱烁?jiǎn)單表述。在看原型鏈后你就會(huì)明白.toString()這類沒有定義過的方法是怎樣來的。
上面說的二義性,是文字理解上的,語(yǔ)法本身沒有歧義。prototype是原型的意思,可是一個(gè)對(duì)象的原型不是由prototype去訪問。
Function有prototype屬性,可是和自己的原型沒有關(guān)系。理解這點(diǎn)后,再去看關(guān)于原型鏈、繼承的文章就容易理解多了。
下面是些例子,可以加深認(rèn)識(shí):
// 任何對(duì)象都有原型
obj = {};
console.log( obj.__proto__ );
console.log( Object.getPrototypeOf(obj) );
console.log( obj.__proto__ === Object.getPrototypeOf(obj) );
//對(duì)象并沒有語(yǔ)法意義的prototype屬性
alert(obj.prototype) //undefined
//prototype作為一個(gè)屬性,僅存在于Function中,代表以這個(gè)Function創(chuàng)建的新實(shí)例集成的原型,和Function本身的原型無關(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??梢酝ㄟ^這樣證實(shí):
Object.getPrototypeOf( newObj ) === obj; // true
newObj.__proto__ === obj; //true
任何原型都是對(duì)象,只有對(duì)象有原型
只有Function有prototype屬性,它是這個(gè)Function作為構(gòu)造器時(shí)生成對(duì)象所繼承的原型。Function的原型和它的prototype屬性無關(guān)
對(duì)象的原型可以通過非標(biāo)準(zhǔn)的屬性 __proto__ 或ECMAScript5的方法 Object.getPrototypeOf() 訪問。
1其實(shí)是錯(cuò)的,Object這個(gè)原型鏈盡頭的對(duì)象它沒有原型??墒菫榱烁?jiǎn)單表述。在看原型鏈后你就會(huì)明白.toString()這類沒有定義過的方法是怎樣來的。
上面說的二義性,是文字理解上的,語(yǔ)法本身沒有歧義。prototype是原型的意思,可是一個(gè)對(duì)象的原型不是由prototype去訪問。
Function有prototype屬性,可是和自己的原型沒有關(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ì)象并沒有語(yǔ)法意義的prototype屬性
alert(obj.prototype) //undefined
//prototype作為一個(gè)屬性,僅存在于Function中,代表以這個(gè)Function創(chuàng)建的新實(shí)例集成的原型,和Function本身的原型無關(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??梢酝ㄟ^這樣證實(shí):
Object.getPrototypeOf( newObj ) === obj; // true
newObj.__proto__ === obj; //true
您可能感興趣的文章:
- 談?wù)刯s中的prototype及prototype屬性解釋和常用方法
- js的Prototype屬性解釋及常用方法
- JavaScript中prototype為對(duì)象添加屬性的誤區(qū)介紹
- JavaScript中幾個(gè)重要的屬性(this、constructor、prototype)介紹
- JavaScript prototype屬性深入介紹
- javascript中的prototype屬性使用說明(函數(shù)功能擴(kuò)展)
- javascript中的prototype屬性實(shí)例分析說明
- JavaScript為對(duì)象原型prototype添加屬性的兩種方式
- 詳解Javascript中prototype屬性(推薦)
相關(guān)文章
JS co 函數(shù)庫(kù)的含義和用法實(shí)例總結(jié)
這篇文章主要介紹了JS co 函數(shù)庫(kù)的含義和用法,結(jié)合實(shí)例形式總結(jié)分析了JS co 函數(shù)庫(kù)的基本含義、功能、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04
使用 JavaScript 創(chuàng)建并下載文件(模擬點(diǎn)擊)
本文將介紹如何使用 JavaScript 創(chuàng)建文件,并自動(dòng)/手動(dòng)將文件下載,這在導(dǎo)出原始數(shù)據(jù)時(shí)會(huì)比較方便2019-10-10
使用變量動(dòng)態(tài)設(shè)置js的屬性名
js的屬性名可以使用變量,例如js對(duì)象object,當(dāng)賦給該對(duì)象屬性的時(shí)候可以采用以下方式,比較實(shí)用,需要的朋友可以看看2014-10-10
基于JavaScript實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Vue
這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Vue的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09
鍵盤上一張下一張兼容IE/google/firefox等瀏覽器
鍵盤上一張下一張的效果想必大家都有見到過吧,本文為大家介紹的這個(gè)兼容IE,google,firefox等主流瀏覽器2014-01-01
解決html input驗(yàn)證只能輸入數(shù)字,不能輸入其他的問題
下面小編就為大家?guī)硪黄鉀Qhtml input驗(yàn)證只能輸入數(shù)字,不能輸入其他的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07

