为了账号安全,请及时绑定邮箱和手机立即绑定

vue源码里依赖收集的时候 Watcher实例怎么赋值到Dep.target上的?

/ 猿问

vue源码里依赖收集的时候 Watcher实例怎么赋值到Dep.target上的?

溪墨潺 2019-02-01 17:38:32

https://img2.sycdn.imooc.com/5c5412a30001df2407070902.jpghttps://img1.sycdn.imooc.com/5c5412ce0001491103960182.jpg

https://img2.sycdn.imooc.com/5c5412f50001ea0f03930128.jpg

https://img4.sycdn.imooc.com/5c54130f0001558106760640.jpg


看不明白怎么在initData依赖收集的时候  怎么给这个Dep.target赋值个watcher实例的?

查看完整描述

3 回答

?
weixin_珊珊来迟_0

来,咱一步步看。

首先:在执行$mount挂载的时候会调用mountComponent函数,如图:

//img3.sycdn.imooc.com/5e5911e10001319c06370613.jpg

找到lifecycle.js中的mountComponent函数,如图:

//img3.sycdn.imooc.com/5e5911e10001cd5c08680577.jpg

在mountComponent函数中,找到new Watcher(),如图:

//img1.sycdn.imooc.com/5e5912e000012b6005500185.jpg

接下来咱们来看Watcher类的定义中,构造函数内会调用get原型方法,在get方法中调用了pushTarget(this),这个this就是当前的渲染Watcher了,如图:

//img1.sycdn.imooc.com/5e5911e10001740105560657.jpg


查看完整回答
反对 回复 2020-02-28
?
weixin_慕仔1573258

源码:https://github.com/vuejs/vue/blob/dev/src/core/observer/dep.js中有个pushTarget方法,是用来往Dep.target上面赋值为watcher的。watcher的get方法会调用pushTarget方法往Dep上赋值当前watcher对象

查看完整回答
反对 回复 2019-08-27

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信