ES6新特性--Proxy与Reflect

ES6新特性--Proxy与Reflect

Proxy用法

Proxy用法,数据劫持,与Object.defineProperty()一样,Proxy更好用

相当于在obj外面再加一层,加一层的话首先是与原对象解耦,其次是不破坏原对象,以后直接用Proxy对象就行。

		// Proxy的初体验:
		let obj = {};
		let myProxy = new Proxy(obj,{
		    get(){
			   console.log('执行了get方法')
			},
			set(){
			  console.log('执行了set方法')
			}
		});

        // 注意:这个与Object.defineProperty()的调用不一样。这个需要用myProxy对象调用。
		myProxy.testAttr = '1111'
		myProxy.testAttr
		// Proxy中最常用的两个方法:get与set方法的使用
		let obj2 = {};
		let myProxy2 = new Proxy(obj2,{
		    get(target,key){
				console.log('get',target[key])
				return target[key]
			},
			//注意:target是当前对象,key是属性名,value是属性值。例如 obj2.name = 'flx',targrt是obj2;  name是key;  flx是value
			set(target,key,value){
				target[key] = value
			}
		});
		myProxy2.name = 'CXY'
		console.log(myProxy2.name)

Reflect用法

Reflect的使用:用于获取对象(例如Array、Set对象、Object对象等等)默认行为(本身自己带的方法)。最常用的是与Proxy一起使用。

我对Reflect的个人理解,就是反射,比如const obj = {} 。这个时候,我们的obj有了自己的属性与方法,也继承了父类Object的,Reflect就是通过反射,获取到这个大对象的所有属性与方法

举个例子:

        // 不使用Reflect
		const arr0 = [1,2,3,4];
		
		const myProxy0 = new Proxy(arr0,{
		    get(target,key){
			   console.log('myProxy0','get方法执行了')
			   // 改变this指向,使this指向Array而不是myProxy0
			   if(target[key] instanceof Function){
				    return target[key].bind(target)
				}
				return target[key]
			},
			set(target,key,value){
			   console.log('myProxy0','set方法执行了')
			   target[key] = value
			}
		})
		
		myProxy0.push(5)
		console.log(myProxy0)
		// 使用Reflect
		const arr = [1,2,3,4];
		
		const myProxy3 = new Proxy(arr,{
		    // 注意:通过Reflect.get(),获取到arr大对象的方法。也就是Array的各种方法  push()  shfit() 等等。这个时候。肯定不用改变this指向。获取的就是Array的。
		    get(target,key){
			   console.log('myProxy3','get方法执行了')
			   return Reflect.get(target,key)
			},
			set(target,key,value){
			   console.log('myProxy3','set方法执行了')
			   return Reflect.set(target,key,value)
			}
		})
		
		myProxy3.push(5)
		console.log(myProxy3)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值