js Object.prototype.__proto__

該特性已經(jīng)從 Web 標準中刪除,雖然一些瀏覽器目前仍然支持它,但也許會在未來的某個時間停止支持,請盡量不要使用該特性。

當Object.prototype.__proto__已被大多數(shù)瀏覽器廠商所支持的今天,其存在和確切行為僅在ECMAScript 2015規(guī)范中被標準化為傳統(tǒng)功能,以確保Web瀏覽器的兼容性。為了更好的支持,建議只使用?Object.getPrototypeOf().

Object.prototype 的 __proto__ 屬性是一個訪問器屬性(一個getter函數(shù)和一個setter函數(shù)), 暴露了通過它訪問的對象的內(nèi)部[[Prototype]] (一個對象或 null)。

使用__proto__是有爭議的,也不鼓勵使用它。因為它從來沒有被包括在EcmaScript語言規(guī)范中,但是現(xiàn)代瀏覽器都實現(xiàn)了它。__proto__屬性已在ECMAScript 6語言規(guī)范中標準化,用于確保Web瀏覽器的兼容性,因此它未來將被支持。它已被不推薦使用, 現(xiàn)在更推薦使用Object.getPrototypeOf/Reflect.getPrototypeOf 和Object.setPrototypeOf/Reflect.setPrototypeOf(盡管如此,設(shè)置對象的[[Prototype]]是一個緩慢的操作,如果性能是一個問題,應該避免)。

__proto__ 屬性也可以在對象文字定義中使用對象[[Prototype]]來創(chuàng)建,作為Object.create() 的一個替代。

描述

__proto__的讀取器(getter)暴露了一個對象的內(nèi)部 [[Prototype]] 。對于使用對象字面量創(chuàng)建的對象,這個值是 Object.prototype。對于使用數(shù)組字面量創(chuàng)建的對象,這個值是 Array.prototype。對于functions,這個值是Function.prototype。對于使用 new fun 創(chuàng)建的對象,其中fun是由js提供的內(nèi)建構(gòu)造器函數(shù)之一(Array, Boolean, Date, Number, Object, String 等等),這個值總是fun.prototype。對于用js定義的其他js構(gòu)造器函數(shù)創(chuàng)建的對象,這個值就是該構(gòu)造器函數(shù)的prototype屬性。

__proto__ 的設(shè)置器(setter)允許對象的 [[Prototype]]被變更。前提是這個對象必須通過 Object.isExtensible() 判斷為是可擴展的,如果不可擴展,則會拋出一個 TypeError 錯誤。要變更的值必須是一個object或null,提供其它值將不起任何作用。

要理解原型如何被使用,請查看相關(guān)文章:Inheritance and the prototype chain。

.__proto__屬性是Object.prototype 一個簡單的訪問器屬性,其中包含了get(獲?。┖蛃et(設(shè)置)的方法,任何一個__proto__的存取屬性都繼承于Object.prototype,但一個訪問屬性如果不是來源于Object.prototype就不擁有.__proto__屬性,譬如一個元素設(shè)置了其他的.__proto__屬性在Object.prototype之前,將會覆蓋原有的Object.prototype。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容