📜  JavaScript Object.freeze()

📅  最后修改于: 2020-09-27 06:45:27             🧑  作者: Mango

JavaScript Object.freeze()方法冻结对象。

冻结的对象无法再更改。冻结对象可防止:

  • 从新属性添加到对象。
  • 要从对象中删除的现有属性。
  • 更改现有属性的可枚举性,可配置性或可写性。
  • 更改现有对象属性和原型的值。

freeze()方法的语法为:

Object.freeze(obj)

作为对象的静态方法, freeze()方法使用Object类名称进行调用。


Frozen()参数

freeze()方法采用:

  • obj-要冻结的对象。

从Frozen()返回值
  • 传递给函数的对象。

注意事项

  • 任何尝试添加或删除冻结对象的属性集的尝试都将失败,或者失败或抛出TypeError (通常在严格模式下)。
  • 使用Object.seal()密封的对象可以更改其现有属性,而Object.freeze()可以使现有属性不变。

示例:使用freeze()
let obj = {
  prop: function () {},
  foo: "bar",
};

let o = Object.freeze(obj);

console.log(o == obj); // True -> Returns the same object
console.log(Object.isFrozen(obj)); // true

// changes will fail silently
obj.foo = "bar1";
console.log(obj.foo); // bar

// does not add silently
obj.new_foo = "bar";
console.log(obj.new_foo); // undefined

// Following will also throw error
// Object.setPrototypeOf(obj, { x: 20 })

输出

true
true
bar
undefined

注意Object.freeze(obj)仅适用于obj的立即属性。如果这些属性的值是对象本身,则这些对象不会冻结,并且可能成为属性添加,移除或值重新分配操作的目标。


推荐阅读: JavaScript Object seal()