有沒有可能改變IE9或IE10中對象的__proto__
屬性? 或者MS仍然沒有計劃將它包含在他們的JS引擎中?__proto__ for IE9 or IE10
我需要它在一個非常特殊的情況下,我需要更改__proto__
後對象被創建。
有沒有可能改變IE9或IE10中對象的__proto__
屬性? 或者MS仍然沒有計劃將它包含在他們的JS引擎中?__proto__ for IE9 or IE10
我需要它在一個非常特殊的情況下,我需要更改__proto__
後對象被創建。
__proto__
是將在ES6中進行標準化。它目前在Appendix B of the ES6 draft這實際上意味着如果它被實現它需要有以下語義。
__proto__
作爲Object.prototype
上的訪問者都可用,這意味着默認情況下所有對象都可以讀寫它。但是,它可以從Object.prototype
中刪除(使用delete
)。一旦刪除__proto__
將作爲一個正常的數據屬性,對設置沒有副作用。
__proto__
也是對象文字中的一種特殊語法形式。即使Object.prototype.__proto__
被刪除,它也會設置[[原型]]。
var p = {a: 1}; var o = { __proto__: p, b: 2 }
ES6還介紹了Object.setPrototypeOf
(不在附錄中)。這比設置__proto__
更受歡迎。
__proto__
適用於所有現代瀏覽器,including Internet Explorer 11。
我不確定究竟是什麼,因爲您的問題沒有指定,但對於proto的大多數用途,您應該能夠使用prototype
。
var foo = new Bar();
//this also affects foo
Bar.prototype.baz = something;
我didn't指定的,因爲我想知道的唯一的事情是,如果IE9/10支持修改__proto__屬性,因爲it'是目前唯一不支持的瀏覽器。 –
我不明白「新酒吧();」。你如何使用Object.create來重寫? –
一個nonanswer作爲最後嘗試的手段:
更改您的代碼,以便將原本通過改變原型進行訪問的所有屬性都通過明確的代表團在一個正常的屬性現在訪問:
{
a: 17,
__proto__: { ... }
}
到
{
a: 17,
proto: {...}
}
__proto__
包括在IE11在Windows藍色的泄露版本中發現:http://fremycompany.com/BG/2013/Internet-Explorer-11-rsquo-s-leaked-build-395/
我希望這是真的。你知道ES6是否允許從Array有效地派生? –
__proto__不在標準軌道上 - 而是ES6批准的Object.setPrototypeOf以獲得更好的支持https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto –
是的ES6將支持建立在像Array這樣的本地類中的子類。 –