原理
vue.js
是采用数据劫持结合发布者-订阅者的模式的方法,通过Object.defineProperty()
来劫持各个属性的Getter
、setter
,在数据变动时发送消息给订阅者。
实现的整个流程
首先为每个vue
属性用Object.defineProperty()
实现数据劫持,为每个属性分配一个订阅者集合的管理数组dep
;然后在编译的时候在该属性的数组dep
中添加订阅者
,v-model
就会添加一个订阅者
,接着为input添加监听事件
,修改值就会为该属性赋值,触发该属性的set
方法,在 set
方法内通知订阅者数组dep
,订阅者数组
循环调用各订阅者的update
方法更新视图
。
OK 这样回答就非常完美了