function createObsever(obj) {
// 观察者
const observers = []
//使用proxy代理对象,使用Reflect保证默认行为
const proxyObj = new Proxy(obj, {
set(target, p, value, receiver) {
Reflect.set(target, p, value, receiver)
observers.forEach(fn => fn())
}
})
// 返回代理对象和添加观察者的方法
return {
proxy: proxyObj,
setObserver: function (fn) {
observers.push(fn)
}
}
}
const obj = {
a: 1,
b: 2
}
const pro = createObsever(obj)
pro.setObserver(() => { console.log(1) })
pro.proxy.a = 12
console.log(obj.a)