Proxy,用于创建一个对象的代理,该代理可以拦截并自定义对代理对象的访问。
Proxy 对象由两个参数组成,第一个参数是要代理的目标对象,第二个参数是一个配置对象,用于设置代理对象的行为。Proxy 配置对象可以具有以下属性:
- get(target, property, receiver):用于拦截对代理对象属性的读取操作。
- set(target, property, value, receiver):用于拦截对代理对象属性的写入操作。
- has(target, property):用于拦截 in 操作符。
- deleteProperty(target, property):用于拦截 delete 操作符。
- apply(target, thisArg, argumentsList):用于拦截对代理对象的函数调用操作。
- construct(target, argumentsList, newTarget):用于拦截对代理对象的 new 操作符操作。
下面是一个使用 Proxy 的例子,用于拦截对一个对象属性的读取和写入操作:
let target = { name: 'Alice', age: 30 };
let handler = {
get(target, property, receiver) {
console.log(`Getting property "${property}"`);
return target[property];
},
set(target, property, value, receiver) {
console.log(`Setting property "${property}" to "${value}"`);
target[property] = value;
return true;
}
};
let proxy = new Proxy(target, handler);
console.log(proxy.name); // 输出:Getting property "name",Alice
proxy.age = 31; // 输出:Setting property "age" to "31"
console.log(proxy.age); // 输出:Getting property "age",31
在这个例子中,handler 对象定义了 get 和 set 方法,用于拦截对 target 对象属性的读取和写入操作。然后,我们使用 new Proxy(target, handler) 创建一个代理对象 proxy,并使用 proxy 对象来访问 target 对象的属性。每次访问 proxy 对象的属性时,都会调用 handler 中定义的相应拦截方法。