vue2中基本概念的理解

Vue是什么?

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

简单来说,Vue关注的是将数据变成界面。

Vue的渐进式怎么理解?

Vue可以自底向上逐层的应用,当我们的应用比较简单时,只需引入一个或几个轻量小巧的核心库,当我们的功能和需求越来越多,应用越来越复杂时,我们就可以引入各种各样的Vue插件。

Vue的特点

1.采用组件化模式,提高代码复用率,让代码更好维护。

组件系统是 Vue 的另一个重要概念,因为它是一种抽象,允许我们使用小型、独立和通常可复用的组件构建大型应用。仔细想想,几乎任意类型的应用界面都可以抽象为一个组件树:

2.声明式编码,让编码人员无需直接操作DOM,以提高开发效率。

<div id="app">  <!-- html -->
  {{ message }}
</div>
var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
})

3.Vue中数据和 DOM 被建立了关联,所有东西都是响应式的

在2中,只要我们修改app.message的值,那么修改后的值就会在页面上呈现,这就是Vue的响应式,我们不用和HTML交互而是直接操作Vue实例对象,那么DOM元素就会随之发生变化。

4.使用虚拟DOM(Virtual-DOM)+优秀的Diff算法,尽量复用DOM节点。

vue在拿到数据后,先将数据变成虚拟DOM,并且将新的虚拟DOM和旧的虚拟DOM进行diff比较,从而复用DOM节点,进行优化。

Vue中的MVVM模型:

因为Vue的设计受到了MVVM模型的启发,所以Vue的实例对象我们一般用vm(ViewModel 的缩写)来表示,所以这里也得说一下MVVM模型。

M(Model):对应Vue中的数据

V(view):对应Vue中的模板

VM(ViewModel):对应Vue的实例对象

也就是说Vue的实例对象与Vue的模板进行了数据绑定,所以我们在修改数据的时候,模板中的内容也会随之而变化。

Vue中的数据代理

Object.defineProperty

在es6语法中的数据代理是通过该方式实现的。

Object.defineProperty() 静态方法会直接在一个对象上定义一个新属性,或修改其现有属性,并返回此对象。

const object1 = {};

Object.defineProperty(object1, 'property1', {
  value: 42,
  writable: false,
});

object1.property1 = 77;
// Throws an error in strict mode

console.log(object1.property1);
// Expected output: 42

语法:

Object.defineProperty(obj, prop, descriptor)

默认情况下,使用 Object.defineProperty() 添加的属性是不可写、不可枚举和不可配置的。

在descriptor中有很多配置项:


				// value:18,
				// enumerable:true, //控制属性是否可以枚举,默认值是false
				// writable:true, //控制属性是否可以被修改,默认值是false
				// configurable:true //控制属性是否可以被删除,默认值是false
	
				//当有人读取person的age属性时,get函数(getter)就会被调用
				get(){
					console.log('有人读取age属性了')
					return number
				},
	
				//当有人修改person的age属性时,set函数(setter)就会被调用
				set(value){
					console.log('有人修改了age属性,且值是',value)
					number = value
				}
	
			})

什么是数据代理?

数据代理就是通过一个对象代理对另一个对象中属性的操作(读/写)

		<script type="text/javascript" >
			let obj = {x:100}
			let obj2 = {y:200}

			Object.defineProperty(obj2,'x',{
				get(){
					return obj.x
				},
				set(value){
					obj.x = value
				}
			})
        </script>

上述代码中,我们可以通过对象obj2来对obj1中的x属性进行读写

Vue中的数据代理

当创建一个 Vue 实例时,Vue 会遍历传入的 data 选项中的所有属性,并使用 Object.defineProperty 将这些属性添加到 Vue 实例上,并设置 getter 和 setter 方法。这样一来,当您在 Vue 实例中访问这些属性时,实际上是通过 getter 方法来获取属性值;当您修改这些属性时,实际上是通过 setter 方法来更新属性值。这就是数据代理的核心机制。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值