Proxy handler
Proxy 的 handler 对象是一个占位符对象,它包含了用于
Proxy
的陷阱(Trap)函数。此处可以理解为由Proxy所暴露出的钩子函数,handler作为挂载钩子函数的对象存在,不同的操作会触发不同的钩子函数
,handler提供了覆写钩子函数的方法。
方法
所有的陷阱是可选的。如果某个陷阱没有定义,那么就会保留默认行为。
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
的陷阱。handler.apply()
- 函数调用操作的陷阱。
handler.construct()
new
运算符的陷阱。
一些不标准的陷阱已经废弃并且被移除了
规范
浏览器兼容性
BCD tables only load in the browser