语法:
Object.defineProperty(obj, prop, descriptor)
返回参数中的obj。
obj:要定义的对象;
prop:要定义或修改的属性的名称(或者Symbol);
descriptor:要定义或修改的属性描述符。
descriptor里有以下几种选项:
- configurable
- enumerable
- value
- writable
- get
- set
Javascript对象有两种描述符:数据描述符和存取描述符。
数据描述符没有get和set选项,存取描述符没有value和writable选项。
如果一个描述符没有get&set也没有value&writable,则被默认为数据描述符。
如果一个描述符同时有get|set和value|writable,则会产生一个异常。
Uncaught TypeError: Invalid property descriptor. Cannot both specify
accessors and a value or writable attribute, #
at Function.defineProperty ……
数值描述符eg:
const object1 = {};
Object.defineProperty(object1, 'property1', {
value: 42,
writable: false
});
object1.property1 = 77;
// throws an error in strict mode
console.log(object1.property1);
// expected output: 42
存取描述符eg:
const obj = {};
Object.defineProperty(obj, "prop", {
set(newValue) {
propValue = newValue;
this._prop = newValue; // 用于get获取数值
console.log("设置当前值为" + newValue)
},
get() {
console.log("获取到当前值" + this._prop)
return this._prop
}
})
obj.prop = 88; // 设置当前值为88
console.log(obj.prop); // 获取到当前值88