vue双向绑定原理

原理

1,核心在Object.defineProperty()

这个方法实现对象属性的拦截

let a={}
a.b=''
Object.defineProperty(a,b,{
    set(value){设置时触发
//触发更新视图 this.b=value }, get(value){//读取是触发 //添加订阅者
return value } })

 2.订阅发布模式

1,定义一个监听器Observer,劫持属性,属于发布者,一旦属性发生变化,立个通知订阅者

2,Dep,订阅者的集合,需要在Object.defineProperty里添加订阅者的get和发布,需要dep作为中间的桥梁

3,Watcher,订阅者,这个对象会有触发函数update,以及用于将自己临时存储到Dep.target里,直到触发Object.defineProperty上的get的函数将Watcher存入Dep内部,且释放Dep.target

4,Compile解析器,这个是解析字符模板字符串用的,解析每个节点,创建Watcher并将自己存入Dep的target上,触发了Object.defineProperty上的get的函数,将暂存的Watcher存入Dep内,并初始化视图

5,View,由Compile初始化,接收Watcher的更新,触发对象变化的交互节点

 

 

顺序:

1,利用Object.defineProperty创建Observer,劫持所有属性,且发布信息

2,Compile解析器解析模板,在遇到{{}}或v-modle等节点的时候创建Watcher订阅者,并请将他存入Dep,与此同时初始化View

3,View交互触发数据变化,触发了Object.defineProperty的set函数触发,这个时候通知Dep发生变化,而Dep会通知所有的Watcher触发更新,而Watcher在接收到通知后,会触发自身的函数,更改view的视图界面

 

 

 

 

 

 

 

参考资料 vue的双向绑定原理及实现

 

posted @ 2021-09-02 17:33  来吃点代码  阅读(55)  评论(0编辑  收藏  举报