vue 数据绑定
2019-07-01 本文已影响0人
zzz1t1
https://www.cnblogs.com/libo0125ok/p/8038073.html
let data = {price: 5, count: 10, res: 50}
let target = null
class Observer {
constructor () {
this.array = []
}
subscribe() {
if( target && !this.array.includes(target)) {
this.array.push(target)
}
}
notify() {
this.array.forEach(sub => sub())
}
}
Object.keys(data).forEach(key => {
let internalValue = data[key]
const obs = new Observer()
Object.defineProperty(data, key, {
get() {
obs.subscribe()
console.log('get:' +internalValue)
return internalValue
},
set(val) {
internalValue = val
console.log('set:'+ val)
obs.notify()
}
})
});
function watcher(func) {
target = func
target()
target = null
}
watcher(() => {
data.res = data.price * data.count
})