vue2 defineProperty
// 对象中每一个属性都要这么写一遍,可以用循环的方式实现 Object.keys()
Object.defineProperty(target,property,{
configurable:true, //监听删除和新增属性
get(){
return target.property
},
set(value){
target.property = value;
}
})
vue3 proxy
//原始写法
let p = Proxy(persion,{
get(target,property){
return target[property]
},
// 修改属性或添加属性都会调用
set(target,property,propertyValue){
target[property] = propertyValue
},
deleteProperty(target,property){
return delete target[property]
},
})
//vue 扩展写法 Reflect
let p = Proxy(persion,{
get(target,property){
return Reflect.get(target,property)
},
// 修改属性或添加属性都会调用
set(target,property,propertyValue){
Reflect.set(target,property,propertyValue)
},
deleteProperty(target,property){
returnReflect.deleteProperty(target,property)
},
})
Reflect符合未来规范,因为正在将Object上的方法,逐步迁移到Reflect