Proxy 中的 Handler 对象
handler:对象包含 Proxy 的各个捕获器,且所有的捕获器是可选的。如果没有定义某个捕捉器,那么就会保留源对象的默认行为。
在使用 Proxy 对象的 handler 时,通常与 Reflect 内置对象配合使用,且 Reflect 内置对象的方法与 handler 对象的方法相同。
方法
-
handler.apply():该方法用于拦截函数的调用。
-
语法
const proxy = new Proxy(target, { apply(target, thisArg, argumentsList) { } });
-
参数
target:目标对象(函数)。
thisArg:被调用时的上下文对象。
argumentsList:被调用时的参数数组。 -
返回值
返回任何值。
-
-
handler.construct():该方法用于拦截 new 操作符。为了使 new 操作符生效,目标对象必须是一个函数对象,可构造的。
-
语法
const proxy = new Proxy(target, { construct(target, argumentsList, newTarget) { } });
-
参数
target:目标对象。
argumentsList:constructor 的参数列表。
newTarget:最初被调用的构造函数,就上面的例子而言是 proxy 。 -
返回值
返回一个对象。
-
-
handler.defineProperty():该方法用于拦截对象的 Object.defineProperty() 操作。
-
语法
const proxy = new Proxy(target, { defineProperty(target, property, descriptor) { } });
-
参数
target:目标对象。
property:待检索其描述的属性名。
descriptor:待定义或修改的属性的描述符。 -
返回值
返回一个 Boolean 类型的值,表示定义该属性的操作成功与否。
-
-
handler.deleteProperty():该方法用于拦截对象属性的 delete 操作。
-
语法
const proxy = new Proxy(target, { deleteProperty(target, property) { } });
-
参数
target:目标对象。
property:待删除的属性名。 -
返回值
返回一个 Boolean 类型的值,表示了该属性是否被成功删除。
-
-
handler.get():该方法用于拦截对象的读取属性操作。
-
语法
const proxy = new Proxy(target, { get(target, property, receiver) { } });
-
参数
target:目标对象。
property:被获取的属性名。
receiver:Proxy或者继承Proxy的对象。 -
返回值
返回任何值。
-
-
handler.getOwnPropertyDescriptor():该方法是 Object.getOwnPropertyDescriptor() 方法的钩子。
-
语法
const proxy = new Proxy(target, { getOwnPropertyDescriptor(target, prop) { } });
-
参数
target:目标对象。
prop:返回属性名称的描述。 -
返回值
返回一个 object 或 undefined 。
-
-
handler.getPrototypeOf():该方法是一个 Proxy 方法,当读取 Proxy 对象的原型时,该方法就会被调用。
-
语法
const proxy = new Proxy(target, { getPrototypeOf(target) { } });
-
参数
target:被代理的目标对象。 -
返回值
返回一个 object 或 null 。
-
-
handler.has():该方法是针对 in 操作符的代理方法。
-
语法
const proxy = new Proxy(target, { has(target, prop) { } });
-
参数
target:目标对象。
prop:需要检查是否存在的属性. -
返回值
返回一个 boolean 属性的值。
-
-
handler.isExtensible():该方法用于拦截对对象的 Object.isExtensible() 方法。
-
语法
const proxy = new Proxy(target, { isExtensible(target) { } });
-
参数
target:目标对象。 -
返回值
返回一个 Boolean 值或可转换成 Boolean 的值。
-
-
handler.ownKeys():该方法用于拦截 Reflect.ownKeys() 方法。
-
语法
const proxy = new Proxy(target, { ownKeys(target) { } });
-
参数
target:目标对象。 -
返回值
返回一个可枚举对象。
-
-
handler.preventExtensions():该方法用于设置对 Object.preventExtensions() 方法的拦截。
-
语法
const proxy = new Proxy(target, { preventExtensions(target) { } });
-
参数
target:所要拦截的目标对象。 -
返回值
返回一个布尔值。
-
-
handler.set():该方法是设置属性值操作的捕获器。
-
语法
const proxy = new Proxy(target, { set(target, property, value, receiver) { } });
-
参数
target:目标对象。
property:将被设置的属性名或 Symbol 。
value:新属性值。
receiver:最初被调用的对象。通常是 proxy 本身,但 handler 的 set 方法也有可能在原型链上,或以其他方式被间接地调用(因此不一定是 proxy 本身)。 -
返回值
返回一个布尔值。
-
-
handler.setPrototypeOf():该方法主要用来拦截 Object.setPrototypeOf() 方法。
-
语法
const proxy = new Proxy(target, { setPrototypeOf(target, prototype) { }
});
-
参数
target:被拦截目标对象。
prototype:对象新原型或为 null 。 -
返回值
如果成功修改了 [[Prototype]],setPrototypeOf 方法返回 true,否则返回 false 。
-