demo代码(详细解释见注释)
let car = {};
let val = 3000;
Object.defineProperty(car, 'price', {
// true price属性才会出现在对象的枚举属性中
enumerable: true,
// true price属性的描述符才能够被改变,同时该属性也能从对应的对象上被删除。
configurable: true,
// 访问该属性时,会调用此函数
get() {
console.log("属性被读取");
return val;
},
// 属性值被修改时,会调用此函数
set(newVal) {
console.log("属性值被修改");
val = newVal;
}
})
效果: