handler.construct()

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.construct()-Methode ist eine Falle für die [[Construct]] objektinterne Methode, die von Operationen wie dem new-Operator verwendet wird. Damit die new-Operation auf dem resultierenden Proxy-Objekt gültig ist, muss das zur Initialisierung des Proxy verwendete Ziel selbst ein gültiger Konstruktor sein.

Probieren Sie es aus

Syntax

js
new Proxy(target, {
  construct(target, argumentsList, newTarget) {
  }
})

Parameter

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

target

Das Zielkonstruktorobjekt.

argumentsList

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

newTarget

Der ursprünglich aufgerufene Konstruktor.

Rückgabewert

Die construct()-Methode muss ein Objekt zurückgeben, das das neu erstellte Objekt repräsentiert.

Beschreibung

Abfangungen

Diese Falle kann folgende Operationen abfangen:

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

Invarianten

Die [[Construct]]-interne Methode des Proxys löst einen TypeError aus, wenn die Handler-Definition eine der folgenden Invarianten verletzt:

  • Der target muss selbst ein Konstruktor sein.
  • Das Ergebnis muss ein Object sein.

Beispiele

Abfangen des new-Operators

Der folgende Code fängt den new-Operator ab.

js
const p = new Proxy(function () {}, {
  construct(target, argumentsList, newTarget) {
    console.log(`called: ${argumentsList}`);
    return { value: argumentsList[0] * 10 };
  },
});

console.log(new p(1).value); // "called: 1"
// 10

Der folgende Code verletzt die Invariante.

js
const p = new Proxy(function () {}, {
  construct(target, argumentsList, newTarget) {
    return 1;
  },
});

new p(); // TypeError is thrown

Der folgende Code initialisiert den Proxy unsachgemäß. Der target bei der Proxy-Initialisierung muss für den new-Operator selbst ein gültiger Konstruktor sein.

js
const p = new Proxy(
  {},
  {
    construct(target, argumentsList, newTarget) {
      return {};
    },
  },
);

new p(); // TypeError is thrown, "p" is not a constructor

Spezifikationen

Specification
ECMAScript Language Specification
# sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch