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.
Die handler.apply()
-Methode ist eine Falle für die [[Call]]
interne Objektmethode, die von Operationen wie Funktionsaufrufen verwendet wird.
Probieren Sie es aus
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
Syntax
new Proxy(target, {
apply(target, thisArg, argumentsList) {
}
})
Parameter
Die folgenden Parameter werden an die apply()
-Methode übergeben. this
ist an den Handler gebunden.
target
-
Das aufrufbare Zielobjekt.
thisArg
-
Das
this
-Argument für den Aufruf. argumentsList
-
Ein
Array
, das die an die Funktion übergebenen Argumente enthält.
Rückgabewert
Die apply()
-Methode kann jeden Wert zurückgeben, der den Rückgabewert des Funktionsaufrufs darstellt.
Beschreibung
Abfangmöglichkeiten
Diese Falle kann folgende Operationen abfangen:
- Funktionsaufruf:
proxy(...args)
Function.prototype.apply()
undFunction.prototype.call()
Reflect.apply()
Oder jede andere Operation, die die [[Call]]
interne Methode aufruft.
Invarianten
Die [[Call]]
-Methode des Proxys löst einen TypeError
aus, wenn die Definition des Handlers eine der folgenden Invarianten verletzt:
- Das
target
muss selbst aufrufbar sein. Das heißt, es muss sich um ein Funktionsobjekt handeln.
Beispiele
Abfangen eines Funktionsaufrufs
Der folgende Code fängt einen Funktionsaufruf ab.
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
Spezifikationen
Specification |
---|
ECMAScript® 2026 Language Specification # sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist |