Vue源码系列之数据代理和数据劫持

本文探讨Vue中的数据代理和数据劫持技术。数据代理使得Vue实例可以直接访问data中的数据,而数据劫持是其实现手段之一,通过Object.defineProperty()进行属性的getter和setter设置,实现数据的监听和变化。通过一个例子展示了如何使用Object.defineProperty()实现数据劫持,为理解Vue的响应式原理奠定基础。
摘要由CSDN通过智能技术生成

数据代理和数据劫持

数据代理

有如下数据:

a:{
   
	b:{
   
		name:'张三';
	}
}
a.b.name // 张三

上述代码在访问name属性时需要a.b.name这样访问,那么如果能够直接使用a.name这样访问,就说对象a代理了a.b的任务,实现了数据代理。
那么在Vue中我们能够直接使用Vue实例对象访问到data中的数据就是将数据代理到了Vue实例对象下面,即vm.name代理了vm.$data.name

数据劫持

数据劫持是实现数据代理的一种技术。Vue2.x中使用的是Object.defineProperty(),因此我们有必要学习下这个函数的作用。

在MDN中有如下描述:

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

该方法需要传入三个参数,被定义的对象obj、obj中的属性名、描述符。其中描述符分为数据描述法和存取描述符。这里主要使用存取描述符就可以实现数据代理。
想要详细了解Object.defineProperty() 方法 可以访问MDN
存取描述符,有两个可选的值

  • get,属性的getter函数,在访问对象的属性时会调用该方法。
  • set,属性的setter函数,在访问对象的属性时会调用该方法。

通过一道题目来感受下这个方法的使用:

	let a;
	if(a==1 && a==2 && a==3){
   
		console.log('我进来了');
	}
	

问如何实现上述代码打印出

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值