proxy的handler对象是一个包含了用于
proxies的占位符。
方法
所有的traps是可选的。如果某个trap没有定义,那么默认的行为会应用到目标对象上。
-
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运算符,比如在执行delete proxy.foo时。 -
handler.ownKeys() -
Object.getOwnPropertyNames和Object.getOwnPropertySymbols的trap. -
handler.apply() - 当目标对象为函数,且被调用时触发。
-
handler.construct() -
new运算符的trap。 - 一些不标准的traps已经 废弃并且被移除了
规范
| 规范名称 | 规范状态 | 备注 |
|---|---|---|
| ECMAScript 2015 (6th Edition, ECMA-262) Proxy Object Internal Methods and Internal Slots |
Standard |
浏览器兼容性
We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains.
Find out how you can help!
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | 未实现 | 18 (18) | 12 | 未实现 | 未实现 |
| Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Basic support | 未实现 | 未实现 | 18 (18) | 未实现 | 未实现 | 未实现 |