- vue用Object.defineProperty重写属性的get和set方法
- 并给每个属性new一个dep对象用于订阅当前的watcher
- 在get方法中将当前渲染watcher订阅到dep中
- 在set方法中遍历dep中订阅的watcher执行update方法
- 如果目标属性是对象就递归确保每个属性都能实现双向绑定
渲染watcher
vue在new渲染watcher的时候会将组件挂载更新的方法(updateComponent)传入,存储在渲染watcher中,触发渲染watcher的update方法时实际上是触发这个组件挂载更新方法