提到了vue实现的基本实现原理:Object.defineProperty() -数据劫持 和 发布订阅者模式(观察者),下面讲的就是数据劫持在代码中的具体实现。
1.先看如何调用
new一个对象,传入我们的参数,这个Myvue ,做了啥?
上面看到了在实例化一个Myvue 对象的时候,会执行init方法, init 方法做了两个事,调用了observer 方法,和 实例化调用了 compile 方法。 到这里我们就明白了,实例化一个Myvue后,我们要做的就是监听数据变化和编译模板 。
上面Object.key() 方法,实例化时传入的data里面对应的变量缓存到 Myvue 对象的 $prop上,这样方便在后续处理数据。怎么个方便法呢!...
2.observer 的实现 observer ,模式里面的角色定位 他是一个发布者,也可以理解为是一个观察者function observer (data) { if(!data || typeof data !== 'object') { return; } Object.keys(data).forEach(key => { // 对每个属性监听处理 defineReactive(data, key, data[key]); }) }