从源码中学Vue(五 ) 解析「观察者」Watcher做了什么?( 三 )

Watcher的第二个参数为expOrFn它可以是一个string 或者function

我们实例化的时候传入的实参是updateComponent,它是一个function类型

从源码中学Vue(五 ) 解析「观察者」Watcher做了什么?

所以最终是调用的updateComponent()方法,这个方法里面再调用了。vm.__update()方法。

我们再在当前的文件下找到了_update方法的定义

挂载在Vue原型下的方法,可以看出来我圈出来的两行代码。都会触发一个叫vm.__patch__的方法

patch英文的意思就是补丁。它也是虚拟dom的核心方法。内部做了模板的解析。

到了这一步,我们实际上已经找了虚拟dom算法的位置了。这块还是比较复杂的,小编我还没来得及阅读这块的源码,这里就不再深入了。

Vue的发布订阅模式

我们现在知道了了Vue是通过Observer类去劫持数据,Watcher类实现数据的监听并通知更新dom,其实在Vue中还有一个很重要的概念,那就是发布订阅模式(Dep类)

推荐阅读