跳到主要内容

JavaScript 对象的 Object.freeze() 方法详解

Object.freeze()方法冻结一个对象,即阻止对象被修改。

示例

let obj = {
prop: function () {},
foo: "bar",
};

// 冻结对象
Object.freeze(obj);

// 更改将不会发生
obj.foo = "bar1";
console.log(obj.foo);

// 输出: 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",
};

// 冻结obj对象
let o = Object.freeze(obj);

// 更改将静默失败
obj.foo = "bar1";
console.log(obj.foo);

// 不能添加新属性
obj.new_foo = "bar";
console.log(obj.new_foo);

输出

bar;
undefined;

在上面的示例中,我们创建了一个具有两个属性:prop和foo的对象obj。

然后我们使用Object.freeze()方法冻结了obj,使其不可变。一旦一个对象被冻结,其属性就不能被修改或删除。

输出表明,任何尝试在冻结对象上修改属性或添加新属性都将静默失败,而不会抛出错误。

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

推荐阅读: