Object.freeze()
方法会冻结一个对象,也就是说,它会阻止对象被修改。
示例
let obj = {
prop: function () {},
foo: "bar",
};
// freeze the object
Object.freeze(obj)
// changes will not occur
obj.foo = "bar1";
console.log(obj.foo);
// Output: bar
freeze() 语法
freeze()
方法的语法是
Object.freeze(obj)
这里,freeze()
是一个静态方法。因此,我们需要使用类名 `Object` 来访问该方法。
注意:冻结的对象将无法再被更改。冻结对象会阻止
- 向对象添加新属性。
- 从对象中删除现有属性。
- 更改现有属性的枚举性、可配置性或可写性。
- 更改现有对象属性和原型的数值。
freeze() 参数
freeze()
方法接受
- obj - 要冻结的对象。
freeze() 返回值
freeze()
方法返回
- 传递给函数的对象。
注意事项:
- 任何向冻结对象的属性集添加或删除的操作,要么会静默失败,要么程序会抛出 `TypeError`(主要在严格模式下)。
- 使用 `Object.seal()` 密封的对象可以更改其现有属性,而 `Object.freeze()` 则使现有属性不可变。
示例:JavaScript Object.freeze()
let obj = {
prop: function () {},
foo: "bar",
};
// freeze the obj object
let o = Object.freeze(obj);
// changes will fail silently
obj.foo = "bar1";
console.log(obj.foo);
// cannot add a new property
obj.new_foo = "bar";
console.log(obj.new_foo);
输出
bar undefined
在上面的示例中,我们创建了一个名为 obj 的对象,它有两个属性:prop 和 foo。
然后,我们使用 `Object.freeze()` 方法冻结了 obj,使其不可变。一旦对象被冻结,其属性就不能被修改或删除。
输出表明,任何尝试修改冻结对象的属性或向其添加新属性的操作都会静默失败,而不会引发错误。
注意:Object.freeze(obj)
仅适用于 obj 的直接属性。如果这些属性的值本身是对象,那么这些对象不会被冻结,并且可能成为属性添加、删除或值重新分配操作的目标。
另请阅读