实现原理
数据劫持 + 发布订阅模式
ES5中提供的 Object.defineProperty,浏览器兼容支持到 IE8+
Object.defineProperty
1 | let obj = {}; |
输出结果
1 | === Object.defineProperty 前 === |
数据劫持
为什么要做数据劫持?
- 观察对象,给对象增加 Object.defineProperty
- vue 特点是不能新增不存在的属性,不存在的属性没有 get、set
- 深度响应,每次赋予一个新对象时会给这个新对象增加 defineProperty (数据劫持)
1 | function Observe(data){ |
数据编译
1 | function Mvvm(options = {}){ |
发布订阅
发布订阅:主要利用数组关系,订阅就是放入函数,发布就是让数组里的函数执行
1 | function Dep(){ |
数据更新视图
1 | function replace(frag){ |