Object.defineProperty()
静态方法会直接在一个对象上定义一个新属性,
或修改其现有属性,并返回此对象。
语法
Object.defineProperty(obj, prop, descriptor)
参数
要定义属性的对象。
一个字符串或 Symbol,指定了要定义或修改的属性键。
要定义或修改的属性的描述符。
当设置为 false
时,
- 该属性的类型不能在数据属性和访问器属性之间更改,且
- 该属性不可被删除,且
- 其描述符的其他属性也不能被更改(但是,如果它是一个可写的数据描述符,则
value
可以被更改,writable
可以更改为false
)。
默认值为 false
。
当且仅当该属性在对应对象的属性枚举中出现时,值为 true
。默认值为 false
。
数据描述符还具有以下可选键值:
与属性相关联的值。可以是任何有效的 JavaScript 值(数字、对象、函数等)。默认值为 undefined。
如果与属性相关联的值可以使用赋值运算符更改,则为 true
。默认值为 false
。
下面是一个demo:
// Define an object
const person = {};
// Define a property using Object.defineProperty ,person is obj, name is prop, descriptor is the third parameter
Object.defineProperty(person, 'name', {
value: 'John',
writable: false, // Property cannot be changed
enumerable: true, // Property can be enumerated
configurable: false // Property cannot be deleted
});
// Access the property
console.log(person.name); // Output: John
// Try to change the property value
person.name = 'Jane';
console.log(person.name); // Output: John (value remains the same)
// Enumerate the properties of the object
for (let key in person) {
console.log(key); // Output: name
}
// Try to delete the property
delete person.name;
console.log(person.name); // Output: John (property cannot be deleted)
运行结果: