1.捕获器参数
const target = {
foo:'bar',
};
const handler = {
get(trapTarget,property,receiver){
console.log(trapTarget === target);
console.log(property);
console.log(receiver === proxy);
}
};
const proxy = new Proxy(target,handler);
proxy.foo;
- get捕获器会接收到目标对象、要查询的属性和代理对象三个参数。
2.(Reflect)API方法
const target = {
foo:'bar'
};
const handler = {
get(){
return Reflect.get(...arguments);
}
};
const proxy = new Proxy(target,handler);
console.log(proxy.foo);
console.log(target.foo);
- 处理程序对象中所有可以捕获的方法都有对应的反射(Reflect)API方法。
- 使用反射(Reflect)API也可以像下面这样定义出空代理对象。
const target = {
foo:'bar'
};
const handler = {
get(){
return Reflect.get;
}
};
const proxy = new Proxy(target,handler);
console.log(proxy.foo);
console.log(target.foo);
const target = {
foo:'bar'
};
const proxy = new Proxy(target,Reflect);
console.log(proxy.foo);
console.log(target.foo);
- 以上两个例子为简写方式。
const target = {
foo:'bar',
baz:'qux',
};
const handler = {
get(trapTarget,property,receiver){
let decoration ='';
if(property === 'foo'){
decoration = "!!!";
}
return Reflect.get(...arguments) + decoration;
}
};
const proxy = new Proxy(target,handler);
console.log(proxy.foo);
console.log(target.foo);
console.log(proxy.baz);
console.log(target.baz);
- 当某个属性被访问的时候,可以对返回的值进行一番修饰