首先看下vue官方文档中对于响应式原理说明的配图:
Vue.js 是采用 Object.defineProperty 的 getter 和 setter,并结合观察者模式来实现双向数据绑定的。当把一个普通 Js 对象传给 Vue 实例来作为它的 data 选项时,Vue 将遍历它的属性,通过用Object.defineProperty 设定对象属性的 setter/getter 方法来监听数据的变化,通过getter进行依赖收集,通过setter在数据变更的时候通知订阅者更新视图。
发布—订阅模式
最近又看了一遍《javaScript设计模式与开发实践》中的发布订阅模式,正好结合Vue源码做个总结。
概念:发布订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。
优点:
1. 时间上的解耦:发布-订阅模式可以广泛应用于异步编程中,这是一种替代传递回调函数的方案。
2. 对象之间的解耦:发布-订阅模式让两个对象松耦合地联系在一起,相互通信不再需要显示的调用另外一个对象的接口。
简单的发布-订阅模式的实现:
1. 首先要指定好谁充当发布者;
2. 然后给发布者添加一个缓存列表,用于存放回调函数以便通知订阅者;
3. 最后发布消息的时候,发布者会遍历这