vue双向绑定原理是通过数据劫持结合发布者-订阅者模式来实现的
数据劫持就是通过Object.defaultProperty()来给每个发布者或者说是需要观察的对象Observer添加getter和setter方法(属性被访问,触发getter,属性被改变,触发setter)
只要该对象发生变化就触发setter方法
dep消息订阅者,内部维护了一个数组,用于存储订阅者watcher,数据变动触发notify函数,然后触发订阅者的update方法
compile(指令解析器)负责编译模板,将模板中的变量转换成数据渲染出来,然后初始化页面,同时将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据变化,就会收到通知,更新视图
watcher能够订阅并收到每个属性变动的通知,执行指令绑定的相应回调函数,从而更新视图
MVVM作为数据绑定的入口,整合了observer,watcher,compile三者通过observe监听model数据的变化,compile解析模板指令,利用watcher搭起observer和copile之间的通信桥梁
observer:M
compile:V
watcher:VM