有没有可能,给定以下对象
let target = {
foo:0,
result:[],
bar(){
//some code
}
}
然后将所述对象包装在Proxy()
let handler = {
get(){
// code here
},
apply(){
// code here
}
}
target = new Proxy(target,handler);
捕获调用bar()并将结果保存到results:[]?
我已经尝试了几次
let target = {
called:0,
results:[],
foo(bar){
return bar;
},
}
let handler = {
get(target,prop){
console.log('Get Ran')
return target[prop];
},
apply(target,thisArg,args){
console.log('Apply Ran')
// never runs
}
}
target = new Proxy(target,handler);
target.foo();
此代码错过了 [[ apply ]] 但捕获了 [[ get ]] (如果内存服务,对象方法调用作为两个操作完成,[[ get ]] [[ apply ]])
let target = {
called:0,
results:[],
foo(bar){
return bar;
},
}
let handler = {
get(target,prop){
return target[prop];
},
apply(target,thisArg,args){
let product = target.apply(thisArg,args)
return product;
},
}
let prox = new Proxy(target.foo,handler);
console.log(prox('hello'));
如果我改为将对象方法包装在代理中,它会捕获 [[ apply ]] 但我会丢失对原始对象( this )的引用,因此无法访问结果数组
我还尝试将方法代理嵌套在对象代理中。
有什么想法吗 ?
墨色风雨
相关分类