Dep邮递员(三)

前言

上一节对observer有了粗略的了解,这一节我们了解dep,上一节有两个地方用到dep,

①、dep.depend()

这是defineReactive()中定义的,前面说过defineReactive和observe是分别对value是Object和Array的情况下,对每一个值添加__ob__,确保观察者能监管到数据的每一个变化。

而在dep的源码中,depend是这样的,如果Dep.target存在值,就执行Dep.target.addDep();至于addDep这个方法会在下节中watcher订阅者中了解。addDep方法就是就是给指令添加依赖项。参数是Dep,在Dep源码中,每个实例Dep都会有一个专属的id;

还有就是Dep.target,这是一个全局属性,也是 watcher 与 dep 关联的唯一桥梁,任何时刻都必须保证 Dep.target 只有一个值。

targetStack是存储Dep.target的数组,pushTarget方法会把已有的Dep.target添加到targetStack数组中存起来,popTarget是保证Dep.target的值是唯一的。

②、Notify

Dep类中定义了两个属性,四个方法,一个记录实例专属的id,一个是保存订阅者Watcher数组,方法有四个,addSub、removeSub、depend、notify。

notify的主要功能就是遍历所有的watcher,调用watcher的update方法。

 

 

推荐阅读:Vue2源码分析-逻辑梳理Vue.js 源码学习笔记读懂源码:一步一步实现一个 Vue

关于“Dep邮递员(三)”我的1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注