Я просматривал MDC о новых функциях, добавленных в Object. Один из них, Object.preventExtensions
, предотвращает мутации в прототип объекта, который можно получить с помощью Object.getPrototypeOf
или __proto__
.
Однако в Chrome кажется, что он просто допускает мутации прототипа объекта. В этом можно убедиться, просто выполнив код на соответствующей странице. :
// 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)?