__proto__屬性
__proto__屬性外觀比較奇特,因為它原本是一個內部屬性。
不過當前主流瀏覽器都支援它,並且ES2015將其標準化。
此屬性可以返回或者設定物件的原型物件。
首先回顧一下關於prototype原型的相關知識。
程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼function F(){ this.webName="螞蟻部落"; } F.prototype={ age:4, address:"青島市南區" } let f=new F(); console.log(f.address);
程式碼執行效果截圖如下:
程式碼分析如下:
(1).首先建立建構函式F。
(2).設定建構函式的原型物件是一個自定義物件直接量。
(3).那麼建構函式F的物件例項f會繼承原型物件中的屬性。
下面演示一下__proto__屬性在其中的角色,程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼function F(){ this.webName="螞蟻部落"; } F.prototype={ age:4, address:"青島市南區" } let f=new F(); console.log(f.__proto__==F.prototype);
程式碼執行效果截圖如下:
程式碼返回值為true,分析如下:
(1).物件例項f的__proto__屬性指向它的建構函式的prototype原型物件。
(2).也就是說__proto__屬性擁有者身份是物件例項,它指向建立此物件例項的建構函式的原型物件,當然要辯證的看問題,比如建構函式F也具有__proto__屬性,因為它也是Function建構函式的例項。
[JavaScript] 純文字檢視 複製程式碼執行程式碼function F(){ this.webName="螞蟻部落"; } F.prototype={ age:4, address:"青島市南區" } let f=new F(); console.log(f.hasOwnProperty("__proto__")); console.log(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__"));
程式碼執行效果截圖如下:
程式碼分析如下:
(1).f.hasOwnProperty("__proto__")返回false,說明此屬性是繼承自原型鏈,非自有屬性。
(2).__proto__是訪問器屬性,具體參閱JavaScript get set訪問器屬性一章節。
關於原型鏈上的訪問器屬性特點可以參閱原型鏈上的get與set訪問器屬性一章節。
最後說明:
(1).雖然__proto__屬性已經被標準化,但是並不推薦使用。
(2).推薦使用Object.getPrototypeOf方法與Object.setPrototypeOf方法替代。
(3).使用它設定原型物件,牽一髮動全身,同時設定物件的原型操作較為影響效能,應儘量避免類似操作。
相關文章
- __proto__ 屬性
- CMake 屬性之全域性屬性
- defer 屬性和 async 屬性
- CMake 屬性之目錄屬性
- CMake 屬性之目標屬性
- CSS 屬性篇(七):Display屬性CSS
- Python - 物件導向程式設計 - 公共屬性、保護屬性、私有屬性Python物件程式設計
- 根據屬性字串獲取屬性值字串
- CAD屬性編輯操作——物件屬性教程物件
- CSS字型屬性和文字屬性詳解CSS
- Python 類的屬性與例項屬性Python
- python物件屬性管理(2):property管理屬性Python物件
- ref屬性
- HTML 屬性HTML
- DOM屬性
- Property屬性
- onreadystatechange 屬性
- jQuery 屬性jQuery
- background 屬性
- 私有屬性
- background屬性
- allowfullscreen 屬性
- cssRules 屬性CSS
- previousElementSibling 屬性
- translucent屬性
- parentRule 屬性
- parentStyleSheet屬性
- cssText 屬性CSS
- WPF 之 依賴屬性與附加屬性(五)
- jQuery設定disabled屬性與移除disabled屬性jQuery
- 框架(frameset),全域性屬性框架
- __proto__和prototype
- logback 的屬性
- 17 ### 屬性方法
- 計算屬性
- BGP屬性 ASPath
- 靜態屬性
- 屬性和方法