代理
什么是代理
代理是一个对象,它包装另一个对象并拦截对该对象的访问。代理可以拦截并重定向对目标对象的许多操作,包括属性查找、赋值、函数调用等。
WARNING
代理与反射是 ES6 的新特性,在 ES6 之前没有类似代理的特性,因此转译器可能无法将代理转译为之前的 ES 代码。
创建代理
需要使用 Proxy
构造函数来创建代理对象。
Proxy
构造函数接受两个参数:目标对象 target
和处理程序对象 handler
。
ts
const target = {
id: "target",
};
const handler = {
get() {
return "target handled by proxy";
},
};
const proxy = new Proxy(target, handler);
console.log(proxy.id); // target handled by proxy
创建可撤销代理
Proxy.revocable
方法可以创建一个可撤销的代理。
ts
const revocableTarget = {
id: "revocableTarget",
};
const revocableHandler = {
get() {
return "revocableTarget handled by proxy";
},
};
const { proxy: revocableProxy, revoke } = Proxy.revocable(revocableTarget, revocableHandler);
console.log(revocableProxy.id); // revocableTarget handled by proxy
revoke();
console.log(revocableProxy.id); // TypeError: Cannot perform 'get' on a proxy that has been revoked