---
title: Proxy handler
slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler
tags:
- ECMAScript 2015
- JavaScript
- Proxy
translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy
translation_of_original: Web/JavaScript/Reference/Global_Objects/Proxy/handler
---
{{JSRef}}
Proxy 的 handler 对象是一个占位符对象,它包含了用于 {{jsxref("Proxy")}} 的陷阱(Trap)函数。
此处可以理解为由Proxy所暴露出的钩子函数,handler作为挂载钩子函数的对象存在,不同的操作会触发不同的钩子函数
,handler提供了覆写钩子函数的方法。
方法
所有的陷阱是可选的。如果某个陷阱没有定义,那么就会保留默认行为。
- {{jsxref("Global_Objects/Proxy/handler/getPrototypeOf", "handler.getPrototypeOf()")}}
- 在读取代理对象的原型时触发该操作,比如在执行
{{jsxref("Object.getPrototypeOf")}}(proxy)
时。
- {{jsxref("Global_Objects/Proxy/handler/setPrototypeOf", "handler.setPrototypeOf()")}}
- 在设置代理对象的原型时触发该操作,比如在执行
{{jsxref("Object.setPrototypeOf")}}(proxy, null)
时。
- {{jsxref("Global_Objects/Proxy/handler/isExtensible", "handler.isExtensible()")}}
- 在判断一个代理对象是否是可扩展时触发该操作,比如在执行
{{jsxref("Object.isExtensible")}}(proxy)
时。
- {{jsxref("Global_Objects/Proxy/handler/preventExtensions", "handler.preventExtensions()")}}
- 在让一个代理对象不可扩展时触发该操作,比如在执行
{{jsxref("Object.preventExtensions")}}(proxy)
时。
- {{jsxref("Global_Objects/Proxy/handler/getOwnPropertyDescriptor", "handler.getOwnPropertyDescriptor()")}}
- 在获取代理对象某个属性的属性描述时触发该操作,比如在执行
{{jsxref("Object.getOwnPropertyDescriptor")}}(proxy, "foo")
时。
- {{jsxref("Global_Objects/Proxy/handler/defineProperty", "handler.defineProperty()")}}
- 在定义代理对象某个属性时的属性描述时触发该操作,比如在执行
{{jsxref("Object.defineProperty")}}(proxy, "foo", {})
时。
- {{jsxref("Global_Objects/Proxy/handler/has", "handler.has()")}}
- 在判断代理对象是否拥有某个属性时触发该操作,比如在执行
"foo" {{jsxref("Operators/in", "in")}} proxy
时。
- {{jsxref("Global_Objects/Proxy/handler/get", "handler.get()")}}
- 在读取代理对象的某个属性时触发该操作,比如在执行
proxy.foo
时。
- {{jsxref("Global_Objects/Proxy/handler/set", "handler.set()")}}
- 在给代理对象的某个属性赋值时触发该操作,比如在执行
proxy.foo = 1
时。
- {{jsxref("Global_Objects/Proxy/handler/deleteProperty", "handler.deleteProperty()")}}
- 在删除代理对象的某个属性时触发该操作,即使用 {{jsxref("Operators/delete", "delete")}} 运算符,比如在执行
delete proxy.foo
时。
- {{jsxref("Global_Objects/Proxy/handler/ownKeys", "handler.ownKeys()")}}
- {{jsxref("Object.getOwnPropertyNames")}} 和{{jsxref("Object.getOwnPropertySymbols")}} 的陷阱。
- {{jsxref("Global_Objects/Proxy/handler/apply", "handler.apply()")}}
- 函数调用操作的陷阱。
- {{jsxref("Global_Objects/Proxy/handler/construct", "handler.construct()")}}
- {{jsxref("Operators/new", "new")}} 运算符的陷阱。
一些不标准的陷阱已经废弃并且被移除了
规范
规范 |
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots', 'Proxy Object Internal Methods and Internal Slots')}} |
浏览器兼容性
{{Compat("javascript.builtins.Proxy.handler")}}
相关链接