This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.
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: 30
new 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
| Desktop | Mobile | Server | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
apply |
49 | 12 | 18 | 36 | 10 | 49 | 18 | 36 | 10 | 5.0 | 49 | 10 | 1.0.0 | 1.0 | 6.0.0 |
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/apply