JS 中冻结对象

119 阅读1分钟

1. Object.freeze() -- 只是浅冻结

    -   设置Object.preventExtension(),禁止添加新属性(绝对存在)
    -   设置writable为false,禁止修改(绝对存在)
    -   设置configurable为false,禁止配置(绝对存在)
    -   禁止更改访问器属性(getter和setter)
    
    可以通过 Object.isFrozen() 来判断一个对象是否为冻结对象
    

2. Object.seal()

    -   设置Object.preventExtension(),禁止添加新属性(绝对存在)
    -   设置configurable为false,禁止配置(绝对存在)
    -   禁止更改访问器属性(getter和setter)
    
    可以通过 Object.isSealed 判断一个对象是否为封闭对象
    

区别

     使用 `Object.freeze()` 冻结的对象中的现有属性是不可变的。
     用 `Object.seal()` 密封的对象可以改变其现有属性。

3. Object.preventExtensions()

    Object.preventExtensions()方法让一个对象变的不可扩展,也就是永远不能再添加新的属性。
    
    可以使用 `Object.isExtensible()` 判断一个对象是否可扩展。