handler.apply()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.
Thehandler.apply() method is a trap for the[[Call]]object internal method, which is used by operations such as function calls.
In this article
Try it
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: 3console.log(proxy(1, 2));// Expected output: 30Syntax
new Proxy(target, { apply(target, thisArg, argumentsList) { }})Parameters
The following parameters are passed to theapply() method.this is bound to the handler.
targetThe target callable object.
thisArgThe
thisargument for the call.argumentsListAn
Arraycontaining the arguments passed to the function.
Return value
Theapply() method can return any value, representing the return value of the function call.
Description
>Interceptions
This trap can intercept these operations:
- Function call:
proxy(...args) Function.prototype.apply()andFunction.prototype.call()Reflect.apply()
Or any other operation that invokes the[[Call]]internal method.
Invariants
The proxy's[[Call]] internal method throws aTypeError if the handler definition violates one of the following invariants:
- The
targetmust be a callable itself. That is, it must be a function object.
Examples
>Trapping a function call
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"// 6Specifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist> |