概述:Object.defineProperty()
方法用于在对象上定义或修改一个属性
语法:
//obj:要在其上定义或修改属性的对象。
//prop:要定义或修改的属性的名称或 Symbol。
//descriptor:定义或修改属性的属性描述符。
Object.defineProperty(obj, prop, descriptor)
属性描述符:
value:设置属性的值
writable:布尔值,表示属性值是否可以被写入;如果为true,则属性值可通过赋值修改
get:
enumerable:布尔值,表示属性是否可以被枚举(例如,使用 for...in
循环或 Object.keys()
)。默认为 false
。
configurable: 布尔值,属性符是否可以被删除。默认为 false
。
const obj = {};// 定义一个不可写且不可枚举的属性
Object.defineProperty(obj, 'a', {value: 'valueA',writable: false,enumerable: false
});// 定义一个有 getter 和 setter 的属性
Object.defineProperty(obj, 'b', {get: function() {return this._b;},set: function(newValue) {this._b = newValue;},enumerable: true,configurable: true
});console.log(obj.a); // 输出 "valueA"
obj.a = 'newValue'; // 尝试修改属性,但因为 writable 为 false,所以无效
console.log(obj.a); // 仍然输出 "valueA"console.log(obj.b); // 输出 undefined,因为还没有设置值
obj.b = 'valueB'; // 设置值
console.log(obj.b); // 输出 "valueB"