面试了许多求职者,很多求职者只知其然,而不知所以然,写此文章为广大前端小伙伴指引迷津。纯干货!纯干货!纯干货!
目录
数据绑定
什么是数据绑定?
答:数据变化更新视图,视图变化更新数据。
什么是MVVM?
M:Model(数据层) - 应用的数据及业务逻辑,为开发者编写的业务代码;
V:View(视图层) - 应用的展示效果,各类UI组件,由 template 和 css 组成的代码;
VM:ViewModel(业务逻辑层) - 框架封装的核心,它负责将数据与视图关联起来;
理解ViewModel?
监听器(Observer):get通过dep添加依赖watcher,set通过dep更新watcher的update方法更新视图;
解析器(Compiler):初始化html模板,绑定watcher的update方法;
订阅者(Watcher):可以收到属性的变化通知并执行update更新方法,从而更新视图;
订阅器(Dep):可以收集依赖,通知watcher的update方法;
观察者模式与发布订阅模式?
观察者模式:观察者和被观察者之间的通信。比如Object.defineProperty,getter 和 setter 的内部操作实际上就是运用了观察者模式来实现的。
发布订阅模式:中间增加了一个调度中心,通过第三方来分发信息。比如父子组件自定义事件。
发布订阅模式只是观察者模式中的一种。
面试大白话
答:首先,双向数据绑定, 每new 一个 Vue,主要做了两件事:第一个是监听器通过Object.defineProperty通过getter和setter数据劫持监听data数据,第二个是解析器编译HTML模板。在监听数据的过程中,会为 data 中的每一个属性生成一个订阅器Dep,然后在属性变化的时候执行Watcher 的 update方法。解析HTML 的过程中,初始化视图,会为每个与数据绑定相关的节点生成一个订阅者 watcher,绑定watcher 的 update方法。