我在瀏覽關於添加到對象的新功能的MDC。其中之一Object.preventExtensions
據說可以防止對象原型的突變,這可以通過使用Object.getPrototypeOf
或__proto__
來獲得。Object.preventExtensions實際上允許__proto__的變異?
但是,在Chrome上,它似乎只是允許對象原型的變體。這可以通過只執行對relevant page代碼確認:
// EXTENSION (only works in engines supporting __proto__
// (which is deprecated. Use Object.getPrototypeOf instead)):
// A non-extensible object's prototype is immutable.
var fixed = Object.preventExtensions({});
fixed.__proto__ = { oh: "hai" }; // throws a TypeError
我沒有得到這個TypeError
,並fixed.__proto__.oh === 'hai'
,所以儘管它應該被禁止已設置。我也可以在編碼時加上它,如Object.getPrototypeOf(fixed).oh = 'hai'
。
這是否意味着Chrome對此功能有不同的解釋?如何防止擴展到對象的原型(在Chrome中)?