JavaScript Object.defineProperty() 方法添加或修改对象的现有属性并返回该对象。
用法:
Object.defineProperty(obj, prop, descriptor)
defineProperty() 方法是静态方法,使用Object 类名调用。
defineProperty()参数
defineProperty() 方法包含:
obj- 要在其上定义属性的对象。prop- 要定义或修改的属性的名称或Symbol。descriptor- 正在定义或修改的属性的说明符。
对象中存在的属性说明符有两种类型:数据说明符和访问器说明符。它们可以具有以下可选属性。
configurableenumerable
数据说明符还可以具有:
valuewritable
访问器说明符还可以具有:
getset
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()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
