JavaScript Object.defineProperty() 方法添加或修改对象的现有属性并返回该对象。
用法:
Object.defineProperty(obj, prop, descriptor)
defineProperty()
方法是静态方法,使用Object
类名调用。
defineProperty()参数
defineProperty()
方法包含:
obj
- 要在其上定义属性的对象。prop
- 要定义或修改的属性的名称或Symbol
。descriptor
- 正在定义或修改的属性的说明符。
对象中存在的属性说明符有两种类型:数据说明符和访问器说明符。它们可以具有以下可选属性。
configurable
enumerable
数据说明符还可以具有:
value
writable
访问器说明符还可以具有:
get
set
defineProperty() 的返回值
- 返回传递给函数的对象。
注意:
- 默认情况下,使用
Object.defineProperty()
添加的值是不可变的且不可枚举的。 - 如果说明符既没有
value
,writable
,get
也没有set
键,则将其视为数据说明符。如果说明符同时具有value
或writable
和get
或set
键,则会引发异常。
示例:向对象添加数据属性
let obj = {};
// with a data property descriptor
Object.defineProperty(obj, "property1", {
value: 788,
writable: true,
enumerable: true,
configurable: true,
});
console.log(obj.property1); // 788
// with an accessor property descriptor
Object.defineProperty(obj, "property2", {
get() {
console.log("Getting Value...");
return val;
},
set(newVal) {
console.log("Setting Value...");
val = newVal;
},
enumerable: true,
configurable: true,
});
obj.property2 = 6969; // Setting Value...
console.log(obj.property2); // 6969
输出
788 Setting Value... Getting Value... 6969
我们不能同时混合数据和访问器属性说明符,因为它会引发错误。
要修改属性,对象的 writable
属性必须是 true
,否则在严格模式下它不会修改并抛出错误。
enumerable
属性属性定义属性是由 Object.assign()
还是由扩展运算符选取。
configurable
属性同时控制是否可以从对象中删除属性以及是否可以更改其属性(value
和 writable
除外)。
相关用法
- JavaScript Object.defineProperties()用法及代码示例
- JavaScript Object.isPrototypeOf()用法及代码示例
- JavaScript Object.assign()用法及代码示例
- JavaScript Object.isExtensible()用法及代码示例
- JavaScript Object.getPrototypeOf()用法及代码示例
- JavaScript Object.isFrozen()用法及代码示例
- JavaScript Object.seal()用法及代码示例
- JavaScript Object.getOwnPropertyDescriptors()用法及代码示例
- JavaScript Object.setPrototypeOf()用法及代码示例
- JavaScript Object.getOwnPropertySymbols()用法及代码示例
- JavaScript Object.freeze()用法及代码示例
- JavaScript Object.preventExtensions()用法及代码示例
- JavaScript Object.is()用法及代码示例
- JavaScript Object.fromEntries()用法及代码示例
- JavaScript Object.getOwnPropertyDescriptor()用法及代码示例
- JavaScript Object.getOwnPropertyNames()用法及代码示例
- JavaScript Object.propertyIsEnumerable()用法及代码示例
- JavaScript Object.keys()用法及代码示例
- JavaScript Object.values()用法及代码示例
- JavaScript Object.create()用法及代码示例
注:本文由纯净天空筛选整理自 Javascript Object.defineProperty()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。