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,
});
**推荐阅读: **