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"
in
proxy
时。
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