捕获器
每个代理的主要目的是可以定义捕获器,
- 捕获器就是在处理程序对象中定义的的
基本操作的拦截器
。 - 每个处理程序对象可以包含0个或多个捕获器,每个捕获器都对应一种
基本操作
,可以直接或间接在代理对象
上调用。
每次在代理对象上调用这些基本操作时,代理可以在这些操作传播到目标对象之前先调用捕获器函数,从而拦截并修改相应的行为
const test={
name:"yihen"
}
const tag={
// 捕获器在处理程序对象中以方法名为键
get(){
return "不能让你获取到属性"
}
}
const proxy=new Proxy(test,tag);
/*
当通过代理对象执行get操作时,就会触发get()捕获器。
当然,get()不是ECMAScript对象可以调用的方法。
这个操作在JavaScript代码中可以通过多种形式来触发并被get()捕获器捕获
比如:proxy[property]、proxy.property、Object.create(proxy)[property]等会触发
基本get()操作来获取属性,因此只要这些操作发生在proxy身上就会被捕获
*/
console.log(test.name); // yihen
console.log(proxy.name); // 不能让你获取到属性
console.log(test["name"])// yihen
console.log(proxy["name"])// 不能让你获取到属性
console.log(Object.create(test)['name'])// yihen
console.log(Object.create(proxy)['name'])// 不能让你获取到属性