通过new Vue()开始,会去创建一个Observer(监听器)对象,它会将data里面的每个属性进行递归遍历,然后通过Object.defineProperty()劫持每个属性并添加getter和setter方法,同时创建了一个Dep对象,这个Dep对象和data里面的每个属性是一一对应的,又会去创建一个Compile(解析器)对象来绑定数据和解析指令,并初始化视图,并对每个指令对应的节点绑定更新函数,并添加监听数据的订阅者,一旦数据有变动,收到通知,更新视图;然后它还会去创建一个Watcher(订阅者)对象,在自身实例化时往属性订阅器dep里面添加自己,自身必须有一个updater方法,它是Observer和Compile之间的通信桥梁,如果组件里面更新了某些数据的时候,就会去调用Observer里面的setter方法,它就会去通知Dep,然后Dep又会去通知Wacther,Wacther从而调用updater方法并触发Compile中绑定的更新函数去更新数据和视图。