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');
转载请注明原文地址:https://tech.qufami.com/read-28509.html