$watch的实现就是对Watcher类的封装,在此基础上实现了{deep: true, immediate: true}可选参数。
![](https://i-blog.csdnimg.cn/blog_migrate/2f87ada83fda4be361b98cfae2d9cf44.png)
在实际使用中,expOrFn这个参数可以是一个表达式或者是一个函数,表达式只接受以点分隔的路径,比如“a.b.c”。所以当参数是一个函数的时候,Watcher类的构造器里面会直接把该函数赋值给this.getter = expOrFn,否则,就用parsePath函数去解析表达式后赋值给getter。
值得注意的是,如果参数是函数,那么Watcher会同时观察这个函数里读取的实例上的数据,任一数据变动都会得到通知。
export default class Watcher{constructor(vm, expOrFn, cb){this.vm = vm;if(typeof expOrFn === 'function'){