ES6 Proxy

1.java中有动态代理模式,es6中新引入了Proxy类

<script>
    var obj={name:'ggb',course:'javascript'};
    var proxy=new Proxy(obj,{
        get:function(target,key){
            return 'no';
        },
        set:function(target,key,value){
           // Reflect.set(target,key,value)  1111
        }       


    })
    console.log(proxy.name);//no
    proxy.name='wds';
    console.log(obj.name);//ggb    2222
</script>

运行上述代码,可以看到 代理起作用了,打印proxy.name时候,调用了get方法。带式赋值并没有起作用,如果将上代码中111处解除注释,那么代理会起作用,2222处会打印 wds


加入

        deleteProperty:function(target,key){
            // if(key=='name'){

            // }else{
            //     Reflect.deleteProperty(target,key)
            // }
        }
 
    delete proxy.name;
    console.log(proxy.name)//no
    console.log(obj.name)//wds

发现代理并没有起到删除的功能,如果没有deletePropery:function(){},反倒能删除。另外也可以加入一些逻辑判断,在具体的方法中,如上段代码注释掉的地方。

2.函数代理,上面说的是对象的代理,下面说函数代理

看代码,学知识

function test(){
    console.log('hello world')
}
var proxyFun = new Proxy(test,{


    apply:function(target,cxt,args){
        console.log(target);//test的函数体
        console.log(cxt);//undefined
        console.log(args)//[1,2,3]

        console.log('this.........')
        return Reflect.apply(target,cxt,args)
    }
})

proxyFun(1,2,3);
3.构造函数的代理

function User(){

    console.log('this is class')
}

var ClassProxy=new Proxy(User,{

    construct:function(target,args){

        console.log('this is class proxy handle')
        return Reflect.construct(target,args)
    }
})

new ClassProxy();
//打印结果

this is class proxy handle
this is class



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值