//用Proxy实现数据响应式(vue3.0),粘贴的let onWatch = (obj, setBind, getLogger) => { let handler = { get(target, property, receiver) { getLogger(target, property) // 这句判断代码是新增的,这里体现了Proxy不用一层层递归去为每个属性添加代理,性能上更优 //vue3.0中使用了Proxy替代了原来的Object.defineProperty if (typeof target[property] === 'object' && target[property] !== null) { return new Proxy(target[property], handler); } else { return Reflect.get(target, property); } }, set(target, property, value, receiver) { setBind(value, property) return Reflect.set(target, property, value) } } return new Proxy(obj, handler)}let obj = { a: 1 }let p = onWatch( obj, (v, property) => { console.log(`监听到属性${property}改变为${v}`) }, (target, property) => { console.log(`'${property}' = ${target[property]}`) })p.a = 2 // 监听到属性a改变p.a // 'a' = 2