const data = {
a: 1
}

const dep = []
let val = data['a']
Object.defineProperty(data, 'a', {
set (newVal) {
if(val === newVal) return;
val = newVal
dep.forEach(fn => fn())
},
get () {
// 此时 Target 变量中保存的就是依赖函数
dep.push(Target)
return val
}
})

// Target 是全局变量
let Target = null
function $watch (getter, fn) {
// 将 Target 的值设置为 fn
Target = fn
// 读取字段值,触发 get 函数
getter()
}


$watch(()=>data.a, ()=>{
console.log('data.a is changed')
})
展开
评论