该特性目前仍处于 ECMAScript 6 规范草案中
目前的实现在未来可能会发生改变,甚至被完全删除,请谨慎使用。
概述
Proxy.revocable()
方法可以用来创建一个可撤销的代理对象。
语法
Proxy.revocable(target, handler);
target
- 目标对象,可以是任意类型的对象,比如数组,函数,甚至是另外一个代理对象。
handler
- 处理器对象,包含了一组代理方法,分别控制所生成代理对象的各种行为。
返回值
返回一个包含了所生成的代理对象本身以及该代理对象的撤销方法的对象。
描述
该方法的返回值是一个对象,其结构为: {"proxy": proxy, "revoke": revoke},其中:
proxy
- 表示新生成的代理对象本身,和用一般方式
new Proxy(target, handler)
创建的代理对象没什么不同,只是它可以被撤销掉。 revoke
- 撤销方法,调用的时候不需要加任何参数,就可以撤销掉和它一起生成的那个代理对象。
一旦某个代理对象被撤销,它将变的几乎完全不可用,在它身上执行任何的可代理操作都会抛出 TypeError
异常(注意,可代理操作一共有 14 种
,执行这 14 种操作以外的操作不会抛出异常)。一旦被撤销,这个代理对象永远不可能恢复到原来的状态,同时和它关联的目标对象以及处理器对象将有可能被垃圾回收掉。调用撤销方法多次将不会有任何效果,当然,也不会报错。
示例
var revocable = Proxy.revocable({}, { get(target, name) { return "[[" + name + "]]"; } }); var proxy = revocable.proxy; proxy.foo; // "[[foo]]" revocable.revoke(); // 执行撤销方法 proxy.foo; // TypeError proxy.foo = 1 // 同样 TypeError delete proxy.foo; // 还是 TypeError typeof proxy // "object",因为 typeof 不属于可代理操作
规范
规范名称 | 规范状态 | 备注 |
---|---|---|
ECMAScript 6 (ECMA-262) Proxy Revocation Functions |
Draft |
浏览器兼容性
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | 未实现 | 34 (34) | 未实现 | 未实现 | 未实现 |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | 未实现 | 未实现 | 34 (34) | 未实现 | 未实现 | 未实现 |