跳到主要内容

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

Object.preventExtensions()方法阻止向对象添加新属性。

示例

const obj = { x: 1, y: 2 };

// 阻止对象添加新属性
Object.preventExtensions(obj);

// 尝试向对象添加新属性
obj.z = 3;

console.log(obj);

// 输出: { x: 1, y: 2 }

preventExtensions()语法

preventExtensions()方法的语法是:

Object.preventExtensions(obj);

这里,preventExtensions()是一个静态方法。因此,我们需要使用类名Object来访问这个方法。

preventExtensions()参数

preventExtensions()方法接受:

  • obj - 应该被设置为不可扩展的对象。

preventExtensions()返回值

preventExtensions()方法返回obj,即被设置为不可扩展的对象。

注释:

  • 无法再向其中添加新属性的对象称为不可扩展对象。
  • 一般情况下,不可扩展对象的属性仍然可以被删除。
  • 尝试向不可扩展对象添加新属性将会失败,或者在严格模式下会抛出TypeError
  • 仍然可以向不可扩展对象的原型中添加属性。

示例:JavaScript对象Object.preventExtensions()

// 创建一个空对象
let obj = {};

// 向对象添加属性
Object.defineProperty(obj, "name", {
value: "Smith",
});

// 打印对象
console.log(obj.name);

// 阻止向对象添加新属性
Object.preventExtensions(obj);

// 向对象添加另一个属性
Object.defineProperty(obj, "age", {
value: 26,
});

// 打印对象
console.log(obj.age);

输出

Smith
Object.defineProperty(obj, "age", {
^

TypeError: 无法定义属性age,因为对象不可扩展

在上面的示例中,我们使用了preventExtensions()方法来阻止向obj对象添加新属性。

首先,我们创建了一个空的obj对象,并使用defineProperty()方法向对象添加了name属性。

// 输出: Smith
console.log(obj.name);

上面的代码输出Smith,意味着name属性已被添加到对象中。

然后,我们使用preventExtensions()方法使obj变为不可扩展。

Object.preventExtensions(obj);

最后,我们尝试在obj上定义一个新的属性age,导致了TypeError

Object.defineProperty(obj, "age", {
value: 26,
});

**推荐阅读: **