可撤销的代理
-
有时候可能需要中断代理对象与目标对象之间的联系。对于使用 new Proxy()创建的普通代理来说,这种联系会在代理对象的生命周期内一直持续存在。
-
Proxy 也暴露了 revocable() 的方法,这个方法支持撤销代理对象与目标对象的关联。撤销代理的操作是不可逆的。而且,撤销函数(revoke())是幂等的,调用多少次的结果都一样。撤销代理之后在调用代理会抛出 TypeError
-
撤销函数和代理对象是在实例化同时生成的:
const target = { foo: "bar"; } const handler = { get() { return 'intercepted' } } const {proxy, revoke} = Proxy.revocable(target, handler) console.log(proxy.foo); // intercepted revoke() console.log(proxy.foo); // TypeError