Proxy.handler
处理器对象用来自定义代理对象的各种可代理操作。
方法
一共有 13 种可代理操作,每种操作的代号(属性名/方法名)和触发这种操作的方式列举如下。注意,如果没有定义某种操作,那么这种操作会被转发到目标对象身上。
handler.getPrototypeOf()在读取代理对象的原型时触发该操作,比如在执行 Object.getPrototypeOf(proxy)时。
handler.setPrototypeOf()在设置代理对象的原型时触发该操作,比如在执行 Object.setPrototypeOf(proxy, null)时。
handler.isExtensible()在判断一个代理对象是否是可扩展时触发该操作,比如在执行Object.isExtensible(proxy)时。
handler.preventExtensions()在让一个代理对象不可扩展时触发该操作,比如在执行Object.preventExtensions(proxy)时。
handler.getOwnPropertyDescriptor()在获取代理对象某个属性的属性描述时触发该操作,比如在执行Object.getOwnPropertyDescriptor(proxy, "foo")时。
handler.defineProperty()在定义代理对象某个属性时的属性描述时触发该操作,比如在执行Object.defineProperty(proxy, "foo", {})时。
handler.has()在判断代理对象是否拥有某个属性时触发该操作,比如在执行"foo"inproxy时。
handler.get()在读取代理对象的某个属性时触发该操作,比如在执行 proxy.foo时。
handler.set()在给代理对象的某个属性赋值时触发该操作,比如在执行 proxy.foo = 1时。
handler.deleteProperty()在删除代理对象的某个属性时触发该操作,比如在执行 delete proxy.foo时。
handler.ownKeys()在获取代理对象的所有属性键时触发该操作,比如在执行 Object.getOwnPropertyNames(proxy)时。
handler.apply()在调用一个目标对象为函数的代理对象时触发该操作,比如在执行 proxy()时。
handler.construct()在给一个目标对象为构造函数的代理对象构造实例时触发该操作,比如在执行new proxy()时。
一些非标准的陷阱已经过时,已被删除。
规范
Specification | Status | Comment |
|---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'Proxy Object Internal Methods and Internal Slots' in that specification. | Standard | Initial definition. |
ECMAScript Latest Draft (ECMA-262)The definition of 'Proxy Object Internal Methods and Internal Slots' in that specification. | Living Standard | The enumerate handler has been removed. |
浏览器兼容性
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
Basic support | 49 1 | 18 (18) | 12 | 36 | 10 |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
Basic support | No support | No support | 18 (18) | No support | No support | No support |
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com

