Proxy.revocable

Proxy.revocable

Proxy.revocable()方法可以用来创建一个可撤销的代理对象。

语法

Proxy.revocable(target, handler

参数

targetProxy包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)。

返回值

返回一个包含了所生成的代理对象本身以及该代理对象的撤销方法的对象。

描述

该方法的返回值是一个对象,其结构为:{"proxy": proxy, "revoke": revoke},其中:

proxy表示新生成的代理对象本身,和用一般方式new Proxy(target, handler)创建的代理对象没什么不同,只是它可以被撤销掉。

一旦某个代理对象被撤销,它将变的几乎完全不可用,在它身上执行任何的可代理操作都会抛出TypeError异常(注意,可代理操作一共有14 种,执行这 14 种操作以外的操作不会抛出异常)。一旦被撤销,这个代理对象永远不可能恢复到原来的状态,同时和它关联的目标对象以及处理器对象将有可能被垃圾回收掉。调用撤销方法多次将不会有任何效果,当然,也不会报错。

示例

var revocable = Proxy.revocable{}, { get: function(target, name) { return "[[" + name + "]]"; } } var proxy = revocable.proxy; console.log(proxy.foo // "[[foo]]" revocable.revoke( console.log(proxy.foo // TypeError is thrown proxy.foo = 1 // TypeError again delete proxy.foo; // still TypeError typeof proxy // "object", typeof doesn't trigger any trap

规范

SpecificationStatusComment
ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'Proxy Revocation Functions' in that specification.StandardInitial definition.
ECMAScript Latest Draft (ECMA-262)The definition of 'Proxy Revocation Functions' in that specification.Draft

浏览器兼容性

FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support(Yes)(Yes)34 (34)No support(Yes)10.0

FeatureAndroidChrome for AndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic supportNo support(Yes)(Yes)34 (34)No support?10.0