//观察者模式
//监听对象属性的修改,如果属性值发生变化,打印出对象的属性信息(to do somthing)
let queuedObservers = new Set()
//将需要处理的函数,添加到set结构中
let observe = fn => queuedObservers.add(fn)
//需要执行的操作
function print() {
console.log(`${proxy.name},${proxy.age}`)
}
observe(print)
//创建对象的代理对象,拦截对象属性的赋值操作
let observable = obj => new Proxy(obj, {
//拦截对象属性的赋值操作
set(target, key, value, receiver) {
//通过Reflect对目标对象进行属性的赋值
Reflect.set(target, key, value, receiver)
//发出通知 ( to do somthing)
queuedObservers.forEach(observe => observe())
}
})
let target = {
name: "令狐狐冲",
age: 18,
__skill__: "独孤九剑"
}
//根据目标对象生成对应的代理对象
let proxy = observable(target)
proxy.name = "tom"