let cbQueue = new Set()
let observer = (callback) => cbQueue.add(callback)
let observable = data => new Proxy(data, {
set: (obj, prop, newVal, receiver) => {
let oldValue = obj[prop]
let result = Reflect.set(data, prop, newVal, receiver)
if (result) {
cbQueue.forEach(cb => cb(prop, oldValue, newVal))
}
return result
}
})
observer((prop, oldValue, newValue) => {
console.log(`obj的${prop}从${oldValue}变成了${newValue}`)
})
let obj = observable({ name: 'nowell', age: 27 })
obj.age = 26
obj.name = 'yangjie'