es6的Proxy与Reflect

  1. Proxy是在对目标对象的读取时,架设一层拦截,可以在读取对象中的任意一个属性时做一些额外的操作

  2. Proxy与Object.defineProperty方式设置setter、getter方法不同的是,Proxy是对目标对象的整体拦截,而Object.defineProperty注重对对象中的单个属性拦截

    const obj = {
    	a: 1,
    	b: 2
    };
    // 向obj中添加属性d,并设置setter、getter拦截
    let _data = '默认值';
    Object.defineProperty(obj, 'd', {
    	set(value) {
    		console.log('来设置d属性值了');
    		_data = value;
    	},
    	get() {
    		console.log('来获取d属性值了');
    		return _data;
    	}
    });
    console.log(obj.a); // 1 (不会触发d属性的拦截器)
    console.log(obj.b); // 2 (不会触发d属性的拦截器)
    console.log(obj.d);
    obj.d = '3';
    

    在这里插入图片描述

    const obj1 = new Proxy(obj, {
    	// 拦截新增和修改操作
    	set(target, key, value) {
    		console.log('来给obj对象的属性设置值了');
    		return Reflect.set(target, key, value);
    	},
    	// 拦截查询操作
    	get(target, key) {
    		console.log('来拿obj对象中的属性值了');
    		return Reflect.get(target, key);
    	},
    	// 拦截删除操作
    	deleteProperty(target, key) {
    		return Reflect.deleteProperty(target, key);
    	}
    });
    console.log(obj1.a);
    console.log(obj1.b);
    console.log(obj1.d);
    obj1.a = 'hello';
    obj1.b = 'hi';
    obj1.d = 'world';
    

    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值