ES6 解释处理程序方法
处理程序是一个对象,其属性是定义代理在执行操作时的行为的函数集合。一个空的处理程序将创建一个行为几乎与目标完全相同的代理。通过在处理程序对象上定义一组特定的函数之一,您可以定制代理行为的特定方面。例如,通过定义get()函数,您可以提供目标的属性访问器的定制版本。
语法:
new Proxy(target, handler)
代理构造函数(proxy constructor) :用于创建一个代理对象,它接受两个参数。
参数:
- target: 要包装为代理的目标对象。可以是任何类型的对象,包括原生数组、函数,甚至是另一个代理。
- handler: 一个对象,其属性是函数,定义代理在执行操作时的行为。
Handler 方法列表: 此部分列出了您可以定义的所有处理程序方法。处理程序方法有时被称为陷阱,因为它们可以捕获对底层目标对象的调用。
- 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 的陷阱。
示例: 在此示例中,目标对象具有两个属性,string 和 num。我们定义了一个处理程序,返回 num 的不同值,并将其他访问透传到目标对象。
JavaScript
<script>
const target = {
string: "GeeksForGeeks",
num: 123
};
const handler = {
get: function (target, prop, receiver) {
if (prop === "string") {
return "GeeksForGeeks";
}
return Reflect.get(...arguments);
}
};
const obj = new Proxy(target, handler);
console.log(obj.string); // "GeeksForGeeks"
console.log(obj.num); // "123"
</script>
输出:
GeeksForGeeks
123
极客教程