2

一旦我这样做:

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

有没有办法修改x?谢谢。

4

2 回答 2

2

不能在冻结对象的属性集中添加或删除任何内容。任何这样做的尝试都会失败,无论是静默还是抛出 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将在创建后将对象writableconfigurable标志设置为 false。

于 2011-09-16T09:41:15.787 回答
1

不,这个想法Object.freeze是你不能再改变它了。根据文档

本质上,对象实际上是不可变的。

和:

不能在冻结对象的属性集中添加或删除任何内容。任何这样做的尝试都会失败,...

于 2011-09-16T09:40:18.300 回答