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 Methode handler.apply() ist eine Falle für die [[Call]] interne Objektmethode, die bei Operationen wie Funktionsaufrufen verwendet wird.

Probieren Sie es aus

function sum(a, b) {
  return a + b;
}

const handler = {
  apply: function (target, thisArg, argumentsList) {
    console.log(`Calculate sum: ${argumentsList}`);
    // Expected output: "Calculate sum: 1,2"

    return target(argumentsList[0], argumentsList[1]) * 10;
  },
};

const proxy1 = new Proxy(sum, handler);

console.log(sum(1, 2));
// Expected output: 3
console.log(proxy1(1, 2));
// Expected output: 30

Syntax

js
new Proxy(target, {
  apply(target, thisArg, argumentsList) {
  }
})

Parameter

Die folgenden Parameter werden an die Methode apply() übergeben. this ist an den Handler gebunden.

target

Das Zielobjekt, das aufrufbar ist.

thisArg

Das this-Argument für den Aufruf.

argumentsList

Ein Array, das die an die Funktion übergebenen Argumente enthält.

Rückgabewert

Die Methode apply() kann jeden Wert zurückgeben, der den Rückgabewert des Funktionsaufrufs repräsentiert.

Beschreibung

Abfangmechanismen

Diese Falle kann folgende Operationen abfangen:

Oder jede andere Operation, die die [[Call]] interne Methode aufruft.

Invarianten

Die [[Call]]-interne Methode des Proxys wirft einen TypeError, wenn die Handler-Definition eine der folgenden Invarianten verletzt:

  • Das target muss selbst aufrufbar sein. Das bedeutet, es muss ein Funktionsobjekt sein.

Beispiele

Abfangen eines Funktionsaufrufs

Der folgende Code fängt einen Funktionsaufruf ab.

js
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® 2025 Language Specification
# sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
apply

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Siehe auch