Vue2
Vue2的数据双向绑定,响应式原理,其实就是通过Object.defineProperty()结合发布者订阅者模式来实现的。
- Observer通过Object.defineProperty进行数据劫持
- Dep发布者,添加订阅者以及在数据发生改变时候通知所有的订阅者
- Watcher订阅者,对数据进行观察以及保存数据修改需要触发的回调
- Compiler模板编译器,对HTML模板进行编译,提取其中的变量并转化为数据(绑定更新Watcher订阅者)。
Vue3
通过Proxy(代理):拦截对象中任意属性的变化,包括:属性值的读写,属性的增加,属性的删除等。
通过Reffect(反射):对源对象的属性进行操作
扩展:Vue2和Vue3响应式区别:
Vue3是使用Proxy,Proxy可以劫持整个data对象,然后递归返回属性的值的代理即可实现响应式;但是它的兼容性不是很好;Vue2是使用Object.defineProperty,它只能劫持对象的属性,所以它需要深度遍历data中的每个属性,这种方式对于数组很不友好,而且对象观测后,新增的属性就不是响应式的,不过可以用Vue.set()来添加新的属性。
什么是MVVM
MVVM是一种设计思想,它是Model-View-ViewModel的缩写,它也是MVC的增强版。
- Model是代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑。
- View是代表UI组件,它负责将数据模型转化成UI展现出来。
- VIewModel是一个同步VIew和Model的对象。