Object.defineProperty(obj,prop,descriptor);
//obj 要在其上定义属性的对象.
//prop 要定义或修改的属性的名称。
//descriptor 将被定义或修改的属性描述符。
不能监听数组的变化,必须遍历对象的每个属性,碧玺深层遍历嵌套的对象。
而Proxy不同
new Proxy(target,handler);
//target 用Proxy包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)
//handler 一个对象,其属性是当执行一个操作时定义代理的行为的函数。
let obj = {
name: 'Eason',
age: 30
}
let handler = {
get (target, key, receiver) {
console.log('get', key)
return Reflect.get(target, key, receiver)
},
set (target, key, value, receiver) {
console.log('set', key, value)
return Reflect.set(target, key, value, receiver)
}
}
let proxy = new Proxy(obj, handler)
proxy.name = 'Zoe' // set name Zoe
proxy.age = 18 // set age 18