JavaScript Object.seal()

Object.seal() 方法会密封给定的对象。这会阻止向对象添加新属性,并将所有现有属性标记为不可配置。

示例

const obj = {
  name: 'John',
  age: 30
};

// seal the obj object Object.seal(obj);
// throws an error in strict mode // silently fails in non-strict mode obj.address = "New York"; console.log(obj.address); // Output: undefined

seal() 语法

seal() 方法的语法是

Object.seal(obj)

seal() 方法作为一个静态方法,使用 Object 类名进行调用。


seal() 参数

seal() 方法接收

  • obj - 要密封的对象。

seal() 返回值

seal() 方法返回被密封的对象,即 obj


示例 1:JavaScript Object.seal()

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

// before sealing, properties can be
// added, modified, or removed
obj.foo = "JavaScript";
obj.value = 5;
delete obj.func;

console.log(obj);

// Output: { foo: 'JavaScript', value: 5 } 

// seal the object let o = Object.seal(obj);
// can still change property values // as it is writable by default obj.foo = "bar1"; console.log(obj); // Output: { foo: 'bar1', value: 5 } // no other change happens, fails silently obj.foo1 = "bar"; delete obj.foo; console.log(obj); // Output: { foo: 'bar1', value: 5 }

从上面的示例可以清楚地看出,在对象被密封之前,我们可以向 obj 对象添加、修改或删除属性。

在使用 seal() 方法密封 obj 后,我们

  • 可以修改现有可写属性,例如 foovalue
  • 不能向 obj 添加新属性(在非严格模式下,尝试会静默失败)

示例 2:seal() 后重新定义属性

const obj = {
    foo : "bar",
}

// seal the object
Object.seal(obj);

// redefine "foo" using defineProperty()
Object.defineProperty(obj, "foo", {
  get: function () {
    return "g";
  },
});

// Output: TypeError: Cannot redefine property: foo

在上面的示例中,由于对象已被 seal() 方法密封,因此无法重新定义 foo 属性。因此,我们得到一个 TypeError

注意事项:

  • 默认情况下,对象是可扩展的(可以向其中添加新属性)。密封对象会使对象上的属性固定且不可变。只要属性是可写的,它们的值仍然可以被更改。
  • 可以使用 Object.isSealed() 来检查对象是否已被密封。
  • 尝试将数据属性转换为访问器属性或反之亦然的操作将静默失败或抛出 TypeError

另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战