📅  最后修改于: 2023-12-03 14:42:26.041000             🧑  作者: Mango
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()
方法返回修改后的对象。