The handler.apply() method is a trap for the [[Call]] object internal method, which is used by operations such as function calls.
function sum(a, b) {
return a + b;
}
const handler = {
apply(target, thisArg, argumentsList) {
console.log(`Calculate sum: ${argumentsList}`);
// Expected output: "Calculate sum: 1,2"
return target(argumentsList[0], argumentsList[1]) * 10;
},
};
const proxy = new Proxy(sum, handler);
console.log(sum(1, 2));
// Expected output: 3
console.log(proxy(1, 2));
// Expected output: 30new Proxy(target, {
apply(target, thisArg, argumentsList) {
}
})The following parameters are passed to the apply() method. this is bound to the handler.
targetThe target callable object.
thisArgThe this argument for the call.
argumentsListAn Array containing the arguments passed to the function.
The apply() method can return any value, representing the return value of the function call.
This trap can intercept these operations:
proxy(...args)Function.prototype.apply() and Function.prototype.call()Reflect.apply()Or any other operation that invokes the [[Call]] internal method.
The proxy's [[Call]] internal method throws a TypeError if the handler definition violates one of the following invariants:
target must be a callable itself. That is, it must be a function object.The following code traps a function call.
const p = new Proxy(function () {}, {
apply(target, thisArg, argumentsList) {
console.log(`called: ${argumentsList}`);
return argumentsList[0] + argumentsList[1] + argumentsList[2];
},
});
console.log(p(1, 2, 3)); // "called: 1,2,3"
// 6