在ES5中可以反转Object.freeze的效果吗?

时间:2011-09-16 09:36:56

标签: javascript ecmascript-5

一旦我这样做了:

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

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

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:1)

不,Object.freeze的想法是你不能再改变它了。根据{{​​3}}:

  

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

  

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