Можно ли изменить эффект Object.freeze в ES5? - PullRequest
2 голосов
/ 16 сентября 2011

Как только я это сделаю:

var x = { };
Object.freeze( x );

Есть ли способ изменить x?Спасибо.

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011

Ничто не может быть добавлено или удалено из набора свойств замороженного объект. Любая попытка сделать это потерпит неудачу, либо молча, либо исключение TypeError (чаще всего, но не исключительно, когда в строгий режим).

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/freeze

Вы можете думать об этом так:

if( typeof ChuckNorris === 'undefined' ) {
    ChuckNorris = Object.create( [Infinity], {
        canCountTo: {
            value: Infinity * 2,
            writable: true,
            configurable: true
        }
    });

    Object.freeze( ChuckNorris ); // nothing can harm Chuck anymore !
}

console.log( ChuckNorris.canCountTo );  // Infinity
delete ChuckNorris.canCountTo;
console.log( ChuckNorris.canCountTo );  // Infinity

Таким образом, freeze установит флаги writable и configurable объектов после создания.

1 голос
/ 16 сентября 2011

Нет, идея Object.freeze в том, что вы больше не можете его изменить. Согласно документации :

По сути, объект сделан эффективно неизменным.

и

Ничто не может быть добавлено или удалено из набора свойств замороженного объекта. Любая попытка сделать это потерпит неудачу, ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...