Мне было интересно, есть ли какие-либо предостережения для freezing
прототипа объекта. Я пытался создать неизменяемый объект, но узнал от докторов, чтоЗамораживающий объект __proto__ in v8
ценность, которые являются объектами по-прежнему может быть изменена, если они не являются также замороженными
Я пытаюсь сделать __proto__
недвижимости неизменны, моя первая попытка участвовать freeze
ИНГ экземпляр:
$ node --version
v0.12.7
$ node
> function Test() {}
undefined
> Test.prototype = {
... hi: function() { return 'hello' }
... }
{ hi: [Function] }
> t = Object.freeze(new Test())
{}
> t
{}
> t.hello = 'hi'
'hi'
> t
{}
> t.hi
[Function]
> t.hi()
'hello'
> t.__proto__.hi = 'changed'
'changed'
> t.hi
'changed'
B ut, когда prototype
заморожен, объект __proto__
неизменен, как ожидалось.
> Test.prototype = Object.freeze({
... hi: function() { return 'hello' }
... })
Теперь экземпляры Test
имеет неизменный __proto__
объекта (наблюдаемый из оболочки). Мне было интересно, Есть ли какие-либо побочные эффекты для замораживания прототипа объекта (возможно, с участием нескольких экземпляров? Или правильного экземпляра объекта?). Целевая среда для узла. Спасибо
Все в порядке, но в чем смысл? – Ryan
Конечно, вы забыли заморозить 'Object.prototype' или использовать' Object.freeze (Object.create (null)) 'для вашего прототипа :-) – Bergi
@minitech Если побочных эффектов нет, я был бы рад принять ваш ответ – dm03514