① vue的数据双向绑定是怎么实现的
vue的数据双向绑定是通过数据劫持和发布-订阅者功能来实现的。
实现步骤:
1.实现一个监听者Oberver来劫持并监听所有的属性,一旦有属性发生变化就通知订阅者。
2.实现一个订阅者watcher来接受属性变化的通知并执行相应的方法,从而更新视图。
3.实现一个解析器compile,可以扫描和解析每个节点的相关指令,并根据初始化模板数据以及初始化相对应的订阅者。
观察者模式确实很有用,但是在javascript实践里面,通常我们使用一种叫做发布/订阅模式的变体来实现观察者模式。
从图中也能看到,这两种模式很相似,但是也有一些值得注意的不同。
发布/订阅模式使用一个主题/事件频道,这个频道处于想要获取通知的订阅者和发起事件的发布者之间。这个事件系统允许代码定义应用相关的事件,这个事件可以传递特殊的参数,参数中包含有订阅者所需要的值。
观察者模式和发布订阅模式的不同点:
观察者模式要求想要接受相关通知的观察者必须到发起这个事件的被观察者上注册这个事件。
发布/订阅模式使用一个主题/事件频道(类似于中介/中间商),可以减少订阅者和发布者之间的依赖性。
发布/订阅模式中订阅者可以实现一个合适的事件处理函数,用于注册和接受由发布者广播的相关通知。