Dep类和Watcher类
依赖就是Watcher
。只有Watcher触发的getter才会收集依赖,哪个Watcher触发了getter,就把哪个Watcher收集到Dep中。
Dep使用发布订阅模式,当数据发生变化时,会循环依赖列表,把所有的Watcher都通知一遍。
代码实现的巧妙之处:Watcher把自己设置到全局的一个指定位置,然后读取数据,因为读取了数据,所以会触发这个数据的getter。在getter中就能得到当前正在读取数据的Watcher,并把这个Watcher 收集到Dep中
修改defineReactive方法
在读取属性时,触发依赖收集,修改属性时,通知更新
1 | import Dep from "./Dep"; |
Dep类
1 | export default class Dep { |
Watcher类
1 | import Dep from "./Dep"; |