1.何为Vue?
- Vue是一套用于构建单页面应用的JavaScript框架,它的核心采用MVVM框架进行搭建,自底向下增量开发,主要的特点就是实现了数据的双向绑定,通过渐进式的开发模式减小项目包体积,采用模块化开发的思想,提高开发效率,最主要的一点是Vue的学习成本很低,可以说是0基础就可以根据官网文档上手。
- Vue主要的有点还是在于它的组件化开开发,可以提高代码的复用性,
2.何为MVVM模式
- 大家数值的开发模式,可能通过最多的是MVC开发模式,当然还有更多的MVP模式,发布订阅者模式等等,那么Vue为什么要采用MVVM的开发模式,其实主要还是因为MVVM模式可以实现数据的双向绑定,它是如何实现的?
- MVVM可以分为,模型层,视图层,视图模型层,模型层主要干的事情就是负责与业务数据相关的操作,就像我们data函数中返回的数据一样,主要负责数据方面的工作,view层顾名思义就是主要负责视图相对应的操作,神秘的vm层也就是视图模型层主要是干什么的?视图模型层就类似一座桥梁,链接模型(数据层)和视图层,它的工作是双向的一边监听数据一边观测试图,无论是数据层发生变化还是视图层发生变化,他都会同步给对方,让视图层和数据层保持一致。实现数据的双向绑定。
3.双向绑定
- 何为双向数据绑定,双向数据绑定就是当你页面的数据发生变化之后,会同步到你的数据中,当你渲染页面的数据发生变化的时候会及时更新到页面。
4.Vue2.0和3.0的实现区别
- Vue2.0中使用Object.defineProperty()实现数据的双向绑定,单层字面意义上理解,是采用了一个对象的方法,那么它就一定会存在缺点,最大的缺点就是不能实时的检测数组发发生的变化,每次检测数据的变化都需要通过,递归,遍历对象的所有属性来获取发生的地方,这样的话对性能以及效率可能会存在一些小小的影响。
- Vue3.0中最主要的改变就是将Object.defineProperty()替换成为Proxy,Proxy是 ES6 中新增的一个特性,翻译过来意思是"代理",用在这里表示由它来“代理”某些操作。 Proxy 让我们能够以简洁易懂的方式控制外部对对象的访问。其功能非常类似于设计模式中的代理模式。
- 创建一个代理
let p = new Proxy(target, handler);
target: 是用Proxy包装的被代理对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)。
handler: 是一个对象,其声明了代理target 的一些操作,其属性是当执行一个操作时定义代理的行为的函数。
p是Proxy对象,当其他操作对p进行更改的时候,会执行handler对象的方法。Proxy有13种数据劫持的操作,常用的handler处理方法:
get: 读取值,
set: 获取值,
has: 判断对象是否拥有该属性,
construct: 构造函数
observe(data) {
const that = this;
let handler = {
get(target, property) {
return target[property];
},
set(target, key, value) {
let res = Reflect.set(target, key, value);
that.subscribe[key].map(item => {
item.update();
});
return res;
}
}
this.$data = new Proxy(data, handler);
}
```这段代码里把代理器返回的对象代理到this.$data,即this.$data是代理后的对象,外部每次对this.$data进行操作时,实际上执行的是这段代码里handler对象上的方法。