Get to know MDN better
Proxy 会对目标(target)对象进行包装。它可以是任何类型的对象,包括原生的数组、函数甚至是另一个代理对象。
handler一个对象,其属性是定义了在对代理执行操作时的行为的函数。
可以使用 Proxy() 构造函数来创建一个新的 Proxy 对象。构造函数接收两个必须的参数:
一个空的处理器(handler)将会创建一个与被代理对象行为几乎完全相同的代理对象。通过在 handler 对象上定义一组函数,你可以自定义被代理对象的一些特定行为。例如,通过定义 get() 你就可以自定义被代理对象的属性访问器。
本节列出了所有你可以自定义的处理函数。处理器函数有时候也被称为劫持(trap),这是由于它们会对底层被代理对象的调用进行劫持。
handler.apply()函数调用劫持。
handler.construct()new 运算符劫持。
handler.defineProperty()Object.defineProperty 调用劫持。
handler.deleteProperty()delete 运算符劫持。
handler.get()获取属性值劫持。
handler.getOwnPropertyDescriptor()Object.getOwnPropertyDescriptor 调用劫持。
handler.getPrototypeOf()Object.getPrototypeOf 调用劫持。
handler.has()in 运算符劫持。
handler.isExtensible()Object.isExtensible 调用劫持。
handler.ownKeys()Object.getOwnPropertyNames 和Object.getOwnPropertySymbols 调用劫持。
handler.preventExtensions()Object.preventExtensions 调用劫持。
handler.set()设置属性值劫持。
handler.setPrototypeOf()Object.setPrototypeOf 调用劫持。
本示例中,被代理对象有两个属性:notProxied 和 proxied。我们定义了一个处理器,它为 proxied 属性返回一个不同的值,而其他属性则通过目标获取。
| ECMAScript® 2027 Language Specification # sec-proxy-constructor |
启用 JavaScript 以查看此浏览器兼容性表。