📜  JavaScript Object defineProperties()方法(1)

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

JavaScript Object defineProperties()方法

defineProperties()方法允许程序员定义或修改对象的属性。这个方法允许程序员为对象中的每个属性显式地定义确切的函数(例如存取器)。

语法
Object.defineProperties(obj, props)

obj:要添加或修改属性的对象。 props:包含一个或多个描述要添加或修改的属性的新属性描述符的对象

参数

props包含所有要添加或修改的属性的对象。每个属性的名称对应该属性的键,在描述符对象的值为一个描述符对象。一个属性描述符是一个普通对象,其中包含一个或多个用于设置属性的值。具体如下:

  • configurable:当且仅当该属性的 configurable 为 true 时,该属性描述符才能够被改变,同时该属性也能从对应的对象上被删除。默认值为 false。
  • enumerable:当且仅当该属性的 enumerable 为 true 时,该属性才会出现在对象的枚举属性中。默认值为 false。
  • value:该属性对应的值。可以是任何有效的 JavaScript 值(数值、对象、函数等)。默认值为 undefined。
  • writable:当且仅当该属性的 writable 为 true 时,该属性的值才能被改变。默认值为 false。
  • get:一个函数,当该属性被访问时,会被调用。默认值为 undefined。
  • set:一个函数,当该属性被赋值时,会被调用。默认值为 undefined。
返回值

修改后的对象。

例子

const obj = {};

Object.defineProperties(obj, {
  property1: {
    value: 42,
    writable: false
  },
  property2: {
    value: 'hello',
    writable: true
  }
});

console.log(obj.property1); // 42
console.log(obj.property2); // "hello"

obj.property2 = 'world';
console.log(obj.property2); // "world"

obj.property1 = 123; // throws an error in strict mode
console.log(obj.property1); // 42

​ 将对象obj的属性property1的值设置为42,同时该属性为不可写,属性property2的值设置为"hello",该属性可写。函数defineProperties返回修改后的obj对象。

​ 我们可以在后续代码中访问这些属性的值,并尝试更改它们,以便理解描述符对象中各个选项的含义。

注意事项

在严格模式下,试图修改不可写属性或删除不可配置属性会引发TypeError异常。在非严格模式下,这些操作会失败但不会引发异常。

总结
  • defineProperties() 方法可以定义或修改对象的属性。
  • 一个属性描述符是一个普通对象,其中包含一个或多个用于设置属性的值。
  • defineProperties() 方法返回修改后的对象。