javascript 通过代理优雅的写代码

tech2026-08-10  1

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)