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"
时。in
proxy -
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) | 未实现 | 未实现 | 未实现 |