2015-09-15 3 views
0

Мне было интересно, есть ли какие-либо предостережения для 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__ объекта (наблюдаемый из оболочки). Мне было интересно, Есть ли какие-либо побочные эффекты для замораживания прототипа объекта (возможно, с участием нескольких экземпляров? Или правильного экземпляра объекта?). Целевая среда для узла. Спасибо

+3

Все в порядке, но в чем смысл? – Ryan

+0

Конечно, вы забыли заморозить 'Object.prototype' или использовать' Object.freeze (Object.create (null)) 'для вашего прототипа :-) – Bergi

+0

@minitech Если побочных эффектов нет, я был бы рад принять ваш ответ – dm03514

ответ

3

Побочный эффект замораживания прототипа (тавтологически) заключается в том, что прототип заморожен. Является ли это причиной проблем, зависит от того, как ваше приложение намеревается использовать прототип. В нем нет ничего изначально неправильного в том, что касается языка. Я бы даже счел это хорошим стилем, если бы не тот факт, что виртуальные машины иногда не очень эффективно реализуют замороженные объекты (они могут быть медленнее обычных объектов при некоторых обстоятельствах, потому что по историческим причинам они считаются особым случаем).

Смежные вопросы