defineProperty
方法的特点
可以直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回这个对象。
defineProperty
用法
Object.defineProperty(obj, prop, descriptor)
- obj:需要操作的对象
- prop:需要操作的属性
- descriptor:属性描述符
Object.defineProperty(obj, 'name', {
value: 'tanran',
writable: true,
configurable: true,
enumerable: true
});
defineProperty
方法
defineProperty
除了可以动态修改 / 新增对象的属性以外
还可以在修改 / 新增的时候给该属性添加 get/set
方法defineProperty
get/set
方法特点
只要通过 defineProperty
给某个属性添加了 get/set
方法
那么以后只要获取这个属性的值就会自动调用 get
, 设置这个属性的值就会自动调用 set
- 注意点:
如果设置了 get/set
方法, 那么就不能通过 value
直接赋值, 也不能编写 writable: true
let obj = {};
let oldValue = '坦然';
Object.defineProperty(obj, 'name', {
configurable: true,
enumerable: true,
get(){
console.log("get方法被执行了");
return oldValue;
},
set(newValue){
if(oldValue !== newValue){
console.log("set方法被执行了");
oldValue = newValue;
}
}
});
console.log(obj.name);
obj.name = 'tanran';