$watch的实现就是对Watcher类的封装,在此基础上实现了{deep: true, immediate: true}可选参数。
在实际使用中,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'){this.getter = expOrFn;

本文详细解析Vue2.0中$watch、$set和$delete的实现原理,包括Watcher类的构造、依赖收集、深层监听(deep)以及$set如何使新增属性响应式,$delete在删除属性后的依赖通知。
最低0.47元/天 解锁文章
1338

被折叠的 条评论
为什么被折叠?



