web面试必问的题
1. vue双向数据绑定原理 vue是采用数据劫持结合发布-订阅 的方式,通过 object.defineProperty() 来劫持各个属性的 setter , getter ,在数据发生变动时发布消息给订阅者,触发相应的监听回调来渲染视图 第一步: 需要 observer 的数据对象进行 递归遍历 ,包括子属性对象的属性,都加上 setter , getter ,这样的话,给这个对象的某个值 赋值 ,就会触发 setter ,那么就能监听到数据变化 简单来说就是实现一个数据监听器Observer,它能够对数据对象的所以属性进行监听,如果有变动就可以拿到最新的值并通知订阅者 第二步: compile 解析模块指令,讲模块中的变量替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据有变动,收到通知,更新视图 简单来说就是实现一个指令解析器Compile,对每个元素节点的指令进行扫描和解析,替换数据,绑定更新函数 第三步: Watcher 订阅者时 Observer 和 Compile 之间的通讯桥梁,主要做的事情是: 1.在自身实例化时往属性订阅器( dep )里面添加自己 2.自身必须有一个 update() 方法 3.待属性变动 dep.notice() 通知时,能调用自身的 update() 方法,并触发 Compile