function Watch(vm, exp) {

this.vm = vm  // 数据集合
this.exp = exp // 需要监听的属性
this.value = this.get() // 初始化时触发自己的get

}
Watch.prototype = {

update() {
    // 执行Compile的方法,触发view更新
},
get() {
    Dep.target = this // Dep.target表示当前订阅者
    let value = this.vm[this.exp] // 这里会触发Observer的getter,因为数据集合已经被劫持
    Dep.target = null  // 重置
    return value
}

}
Object.defineProperty(data,key,{

get() {
    Dep.target && dep.addDep(Dep.target) // 向订阅者容器中添加当前订阅者
    return val
},
set() {
    dep.notify() // 如果发生变化,通知所有订阅者
}

})


疯狂程序猿
4 声望1 粉丝

理论+实践 分享生活


« 上一篇
Vue的回顾
下一篇 »
正则