四川网站建设 lkcms,微商怎么加好友增加大量客源,海口网站建设中心,wordpress 汽车 模板Vue面试题大全一.vue的基本原理二.双向数据绑定的原理三.使用object.defineProperty()来进行数据劫持有什么缺点#xff1f;一.vue的基本原理
当一个vue实例创建的时候#xff0c;vue会遍历data中的属性#xff0c;用object.defineProperty#xff0c;将它们转为getter/se…
Vue面试题大全一.vue的基本原理二.双向数据绑定的原理三.使用object.defineProperty()来进行数据劫持有什么缺点一.vue的基本原理
当一个vue实例创建的时候vue会遍历data中的属性用object.defineProperty将它们转为getter/setter并且在内部追踪相关依赖在属性被访问和修改时通知变化。每个组件实例都有相应的watcher程序实例它会在组件渲染的过程中把谁能够记录为依赖之后依赖的setter被调用时会通知wacther重新计算从而导致它关联的组件得以更新。
二.双向数据绑定的原理
vue 双向数据绑定是通过 数据劫持 结合 发布订阅模式的方式来实现的 也就是说数据和视图同步数据发生变化视图跟着变化视图变化数据也随之发生改变 VUE双向数据绑定其核心是 Object.defineProperty()方法,给Vue中的数据绑定get和set方法当获取数据的时候调用get方法修改data中的数据的时候调用set方法通过watcher监听器去更新视图完成数据的双向绑定。 1. 需要observe的数据对象进行递归遍历包括子属性对象的属性都加上setter和getter这样的话给这个对象的某个值赋值就会触发setter那么就能监听到了数据变化。2. compile解析模板指令将模板中的变量替换成数据然后初始化渲染页面视图并将每个指令对应的节点绑定更新函数添加监听数据的订阅者一旦数据有变大收到通知更新视图。3.watcher订阅者是observer和compile之间通信的桥梁主要做的事情是1*.在自身实例化时往属性订阅器里面添加组件2*.自身必须有一个update()方法.3*待属性变动dep.notice()通知时能调用自身的update方法并触发complie中绑定的回调则功成身退。4. MVVM作为数据绑定的入口整合observer、compile和watcher三者通过observer来监听自己的model数据变化通过compile来解析编译模板指令最终利用watcher搭起来Observer和Compile之间的通信桥梁达到数据变化视图更新视图交互话变化数据model变更的双向绑定效果。三.使用object.defineProperty()来进行数据劫持有什么缺点
在对一些属性进行操作时使用这种方法无法拦截比如通过下标的方式修改数组数据或者给对象新增属性这都不能触发组件的重新渲染因为object.defineProperty不能拦截到这些操作。更精确的来说对于数组而言这都不能触发组件的重新渲染因为object.defineProperty不能拦截到这些操作。更精确的来说对于数组而言大部分操作都是拦截不到的只是vue内部通过重写函数的方式解决 这个问题。 在vue3.0中已经不使用这种方式了而是通过proxy对对象进行代理从而实现数据劫持。使用proxy的好处是它可以完美的监听任何方式的数据改变唯一的缺点是兼容性问题因为proxy是es6的语法。 四.MVVM、MVC 、MVP、的区别 mvcmvpmvvm是三种常见的架构设计模式主要是通过分离关注点的方式来组织代码结构优化开发效率。 在开发单页面应用时往往一个路由对应了一个脚本文件所有的页面逻辑都在一个脚本文件里。页面的渲染数据的获取对用户事件的响应所有的应用逻辑都混合在一起这样开发简单项目的时候可能看不出什么问题来但是如果项目变得复杂那么整个文件就会 变得冗长混乱这样对项目的开发和后期的项目维护非常不利的。 1MVC
MVC:通过分离model、view和controller的方式来组织代码结构。其中view负责页面的显示逻辑 model负责存储页面的业务数据以及对应数据的操作。并且View和Model应用了观察者模式当Model层发生改变的时候他会通知有关View层更新页面。Controller层是view层和model层的纽带,它主要负责用户与应用的响应操作当用户与页面产生交互的时候controller中的事件触发器就开始工作了通过调用model层来完成对model的修改然后model层再去通知view层更新。
2MVVM MVVM分为model,view,viewmodel Model代表数据模型数据和业务逻辑都在model层中定义 view代表ui视图负责数据的展示。 viewmodel负责监听model中数据的改变并且控制视图的更新处理用户交互操作 Model和view没有直接关联而且通过viewmodel来进行联系的model和viewmodel之间有着双向数据绑定的联系。因此当model中的数据改变时会触发view层的刷新view中由于用户交互操作而改变的数据也会在model中同步。 这种模式实现了Model和view的数据自动同步因此开发者只需要专注于数据的维护操作即可而不需要自己操作DOM.
(3)MVP MVP模式与MVC唯一的不同在于presenter和controller。在MVC模式中使用观察者模式来实现当model层数据发生变化的时候通知view层的更新。这样view层和model层耦合在一起当项目逻辑变得复杂的时候可能会造成代码的混乱并且可能会对代码的复用性造成一些问题.MVP的模式通过使用presenter来实现对view层和model层的解耦. MVC中controller只知道model的接口因此他没有办法控制view层的更新MVP模式中View层的接口暴露给了presenter因此可以在persenter中将Model的变化和View的变化绑定在一起以此来实现View和model的同步更新.这样就实现了对view和model的解耦persenter还包含了其他的响应逻辑。