Vue面试题

1. Vue双向绑定的原理
mvvm双向绑定,采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter、getter,在数据变动时发布消息给订阅者,触发相应的监听回调。

图片说明.jpg

几个要点

  1. 实现一个数据监听器Observer,能够对数据对象的所有属性进行监听,数据发生变动时可拿到最新值并通知订阅者。核心方法Object.defineProperty( ),如果要对所有属性都进行监听的话,那么可以通过递归方法遍历所有属性值。
  2. 实现一个指令解析器 Compile,对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数
  3. 实现一个 订阅者Watcher,作为连接 Observer 和 Compile 的桥梁,能够订阅并收到每个属性变动的通知,执行指令绑定的相应回调函数,从而更新视图

具体步骤

  1. 需要 observer 的数据对象进行递归遍历,包括子属性对象的属性,都加上 setter 和 getter,这样的话,给这个对象的某个值赋值,就会触发 setter,那么就能监听到了数据变化
  2. compile 解析模板指令,将模板中的变量替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据有变动,收到通知,更新视图
  3. Watcher 订阅者是 Observer 和 Compile 之间通信的桥梁,主要做的事情是:
    1.在自身实例化时往属性订阅器(dep)里面添加自己
    2.自身必须有一个 update() 方法
    3.待属性变动 dep.notice() 通知时,能调用自身的 update() 方法,并触发 Compile 中绑定的回调
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 3. vue常见面试题 1. vue的优缺点 优点:性能好,简单易用,前后端分离,双向数据绑定,单页面应用用户体验...
    Arthas_Xue阅读 7,492评论 3 24
  • 1. Vue.js介绍 Vue.js是一个构建数据驱动的 web 界面的渐进式框架。Vue.js 的目标是通过尽可...
    哈雷_瑞星阅读 3,297评论 0 1
  • 一、对于MVVM的理解? MVVM 是 Model-View-ViewModel 的缩写。Model代表数据模型,...
    刘松阳阅读 4,342评论 0 1
  • # vue 面试题 性能优化: 1.passive 是性能优化的一种方案,如果有 passive 那么意味着 ev...
    徒步旅行_72c5阅读 3,280评论 0 1
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 126,864评论 2 7