javascript 通过代理优雅的写代码

javascript 通过代理优雅的写代码

通过proxy构造器创建代理
 const emperor={name:'komei'};
 const representative=new Proxy(emperor,{
     get:(target,key)=>{
         
         return key in target?target[key]:"Don't bother the emperor!"
     },
     set:(target,key,value)=>{
     target[key]=value;}
 });
使用代理记录日志
function makeLoggable(target){
        return new Proxy(target,{
            get:(target,property)=>{
                     return target[property];
            },
            set:(target,property,value)=>{
              
                target[property]=value;
            }

        });
    }
使用代理评估性能
function isPrime(number){
        if(number<2){
            return false;
        }
        for(let i=2;i<number;i++){
            if(number%i===0){
                return false;
            }
            return true;
        }}
        isPrime=new Proxy(isPrime,{
            apply:(target,thisArg,args)=>{console.time("isPrime");
            const result=target.apply(thisArg,args);
            console.timeEnd("isPrime");
            return result;
            }
        });
使用代理实现数组负索引
 function createNegativeArrayProxy(array){
         if(!Array.isArray(array)){
             throw new TypeError('Expexted an array');
        
             
         }
         return new Proxy(array,{
             get:(target,index)=>{
                 index=+index;
                 return target[index<0?target.length+index:index];
             },
             set:(target,index,val)=>{
                 index=+index;
                 return target[index<0?target.length+index:index]=val;
             }
         });
     }
     
     const ninjas=["Yoshi","Kuma","Hattori"];
     const proXiedNinjas=createNegativeArrayProxy(ninjas);
    
代理的性能限制
 function measure(items){
            const startTime=new Date().getTime();
            for(let i=0;i<30000;i++){
                items[0]==="Yoshi";
                items[1]==="kuma";
                items[2]==="Hattori";
                console.log(i);
            }
            return new Date().getTime()-startTime;
        }
        const ninjas=["Yoshi","Kuma","Hattori"];
        const proxiedNinjas=createNegativeArrayProxy(ninjas);
        console.log("proxies are around",Math.round(measure(proxiedNinjas)/measure(ninjas)),'times slower');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值