📜  JavaScript Object defineProperty()方法(1)

📅  最后修改于: 2023-12-03 14:42:26.053000             🧑  作者: Mango

JavaScript Object defineProperty()方法

在 JavaScript 中,Object.defineProperty() 方法允许我们为一个对象定义一个新属性,或者修改已有属性的特性,其语法如下:

Object.defineProperty(obj, prop, descriptor)
  • obj: 要在其上定义属性的对象。
  • prop: 要定义或修改的属性的名称。
  • descriptor: 将被定义或修改的属性的描述符。
描述符属性

在 defineProperty() 方法的第三个参数中,可以设置以下描述符属性:

1. value

属性的值。默认为 undefined。

2. writable

如果该属性的值能否被修改。默认为 false。

3. enumerable

如果该属性可以通过for...in循环枚举。默认为 false。

4. configurable

如果该属性可以被delete运算符删除或者修改特性。默认为 false。

5. get

一个给属性提供 getter 的方法,如果不指定 getter,则为 undefined。该方法返回值被用作属性值。默认为 undefined。

6. set

一个给属性提供 setter 的方法,如果不指定 setter,则为 undefined。该方法将接受唯一参数,并将该参数的新值分配给该属性。默认为 undefined。

示例
var obj = {};
Object.defineProperty(obj, "name", {
  value: "Tom",
  writable: false,
  enumerable: true,
  configurable: false
});

console.log(obj.name); // "Tom"
obj.name = "Jerry"; // 尝试修改属性值
console.log(obj.name); // "Tom",属性值未被修改

for (var prop in obj) {
  console.log(prop); // "name"
}

delete obj.name; // 尝试删除属性
console.log(obj.name); // "Tom",属性未被删除

在上面的例子中,我们使用 Object.defineProperty() 方法为 obj 对象定义了一个新属性 name,并设置了属性的描述符。由于 writable 和 configurable 特性均为 false,我们无法修改或删除该属性,但是我们可以通过 for...in 循环枚举到该属性。

结语

Object.defineProperty() 方法是 JavaScript 中非常有用的一个属性设置方法,可以帮助我们更加精细地定义和控制属性的特性。因此,在需要使用该方法的时候,可以从上述示例中进行参考。