vue2监测数据

本文探讨了Vue2的响应式原理,通过Object.defineProperty实现数据代理,介绍了对象和数组的监测方法,帮助理解Vue2如何在数据变化时更新视图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

年前辞职回家相亲 回深之后发现大清都亡了 深圳的前端环境一言难尽
失业在家 就撸一撸代码吧
之前一直使用vue2进行项目的开发 整理一下vue2响应式的原理

vue2的响应式 用到的是Object实例上的defineProperty这个api来实现的数据代理
此时延伸一个概念: 什么是数据代理呢?

1. 数据代理
- 通过一个对象 代理对另外一个对象中属性的操作(读/写)

那Object.defineProperty是怎么使用的呢?
直接上手撸
首先声明 defindeProperty接收三个参数
代码实例:

let number = 20
let person = {
   name: 'yp',
   sex: '男'
}

Object.defineProperty(person,'age', {
	value: 18, // 给person对象中添加一个key,key的值是18 (此时age是不可枚举,且不可修改),
	enumerable: true, // 控制属性是否可枚举, 默认为false 不可被枚举, 此时在控制台为灰色,
	writable: true, // 控制属性是否可以被修改, 默认为false 不可修改
	configurable: true, // 控制属性是否可以被删除, 默认为false 不可删除
	// 当有人读取person中的age属性时 get函数(getter)会被调用 get返回的值就是age的值
	get(){
		return num
	},
	// 当有人修改age的值的时候 set函数(setter)就会被调用 set函数默认接收一个入参 入参就是修改的age的值
	set(val){
		number = val
	}
})
2. 实现一个简单的Vue2的数据监测
对象的检测

let data = {
	name: 'yp',
	age: 18
}

const obs = new Observer(data)

let vm = {}

vm._data = data = obs

function Observer(obj) {
	const keys =  Object.keys(obj)
	keys.forEach(i => {
		Object.defineProperty(this,i,{
			get(){
				return obj[i]
			},
			set(val){
				obj[i] = val
			}
		})
	})
}

此时就实现了简单的 vue2对象的数据监测

vue中数组的监测

vue2中 重写了数组更新的方法 从而在改变时 重新渲染模板 进而更新页面
官网示例如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值