Vue原理
Vue更新数据流程流程

-
Compiler 解析模板成虚拟dom ( render 函数 createElement 就是直接生成虚拟dom )
-
Observer 发现数据改变 通知 Watcher
-
Watcher 通知 Compiler 重新解析模板成虚拟dom
-
diff 虚拟 dom 对改变的部分进行渲染
Tip: 当使用 vue-loader 或 vueify 的时候,*.vue 文件内部的模板会在构建时预编译成 JavaScript ( 编译成 render + createElement )
监视数据更新
数据劫持
new Vue(new VueComponent) 时,遍历 data 通过 Object.defineProperty(),添加set和get(目的:数据发生改变从新解析模板(或者rander方法)生成新的虚dom,对比虚拟 dom 更新页面)
数据代理
将劫持后的数据赋值给 vm._data 上,再利用 Object.defineProperty(),将 vm._data,代理到 vm 上,(相当于 vm.xx === vm._data.xx)