es6 proxy代理与reflect拦截简单用法

有疑问欢迎评论,作者将及时回复与讨论。

//例子1
            var target = {
                a:1,
                b:undefined
            }
            var p = new Proxy(target,{

            });
            p.a = 2; //  操作转发到目标
            console.log(target.a); //2   操作已经被正确地转发


            //例子2
            var p1 = new Proxy({},{
                get:function(target,prop,receiver){
                    console.log(target[prop]);//对应输出:{} "a" Proxy{}
                    console.log(Reflect.get(target,prop));//对应输出:{} "a" Proxy{} 效果与上一行相同
                    //此处可以写操作。
                },
                set:function(target,prop,value,receiver){
                    console.log(target,prop,value,receiver);//对应输出:{} "a" 2 Proxy {}
                    target[prop] = value;
                }
            });
            p1.a = 2;
            p1.a;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 设置代理ES6中,可以使用Proxy对象来设置代理Proxy对象是一个代理对象,它可以拦截并重定义基本操作,比如属性访问、赋值、函数调用等。通过Proxy对象可以实现对一个对象的代理访问,从而实现对该对象的控制。 使用Proxy对象时,需要传入两个参数:要代理的对象和一个处理程序对象。处理程序对象是一个包含各种捕捉器的对象,用于拦截基本操作。 下面是一个简单的例子,展示如何使用Proxy对象设置代理: ```javascript let target = {}; // 要代理的对象 let handler = { // 处理程序对象 get: function(target, prop) { // get捕捉器,拦截属性访问操作 console.log(`访问了属性 ${prop}`); return target[prop]; }, set: function(target, prop, value) { // set捕捉器,拦截属性赋值操作 console.log(`设置了属性 ${prop},新值为 ${value}`); target[prop] = value; return true; } }; let proxy = new Proxy(target, handler); // 创建代理对象 proxy.name = "Tom"; // 设置代理对象的属性 console.log(proxy.name); // 访问代理对象的属性 ``` 上面的代码中,我们使用了Proxy对象设置了一个代理对象。代理对象可以通过handler对象中的get和set捕捉器来拦截属性访问和赋值操作,并进行相应的处理。 2. 获取代理ES6中,可以使用Reflect对象的get方法来获取代理对象的属性值。 Reflect对象是一个内置对象,它提供了一组静态方法,用于操作对象。其中,Reflect.get方法可以用于获取对象的属性值。 下面是一个简单的例子,展示如何使用Reflect.get方法获取代理对象的属性值: ```javascript let target = { name: "Tom" }; // 要代理的对象 let handler = { // 处理程序对象 get: function(target, prop) { // get捕捉器,拦截属性访问操作 console.log(`访问了属性 ${prop}`); return target[prop]; } }; let proxy = new Proxy(target, handler); // 创建代理对象 console.log(Reflect.get(proxy, "name")); // 获取代理对象的属性值 ``` 上面的代码中,我们使用了Reflect.get方法获取了代理对象的属性值。这个方法接收两个参数:要获取属性值的对象和属性名。在这个例子中,我们传入了代理对象和属性名,从而获取了代理对象的属性值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值