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 Trap für die [[Construct]]
interne Objektmethode, die von Operationen wie dem new
-Operator verwendet wird. Damit die new
-Operation bei dem resultierenden Proxy-Objekt gültig ist, muss das für die Initialisierung des Proxy verwendete target
-Objekt selbst ein gültiger Konstruktor sein.
Probieren Sie es aus
function monster1(disposition) {
this.disposition = disposition;
}
const handler1 = {
construct(target, args) {
console.log(`Creating a ${target.name}`);
// Expected output: "Creating a monster1"
return new target(...args);
},
};
const proxy1 = new Proxy(monster1, handler1);
console.log(new proxy1("fierce").disposition);
// Expected output: "fierce"
Syntax
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 Ziel-Konstruktor-Objekt.
argumentsList
-
Ein
Array
, das die an den Konstruktor übergebenen Argumente enthält. newTarget
-
Der Konstruktor, der ursprünglich aufgerufen wurde.
Rückgabewert
Die construct()
-Methode muss ein Objekt zurückgeben, das das neu erstellte Objekt darstellt.
Beschreibung
Abfangbare Operationen
Diese Trap kann die folgenden Operationen abfangen:
- Den
new
-Operator:new myFunction(...args)
Reflect.construct()
Oder jede andere Operation, die die [[Construct]]
interne Methode aufruft.
Invarianten
Beispiele
Abfangen des new-Operators
Der folgende Code fängt den new
-Operator ab.
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.
const p = new Proxy(function () {}, {
construct(target, argumentsList, newTarget) {
return 1;
},
});
new p(); // TypeError is thrown
Der folgende Code initialisiert den Proxy auf fehlerhafte Weise. Das target
in der Proxy-Initialisierung muss selbst ein gültiger Konstruktor für den new
-Operator sein.
const p = new Proxy(
{},
{
construct(target, argumentsList, newTarget) {
return {};
},
},
);
new p(); // TypeError is thrown, "p" is not a constructor
Spezifikationen
Specification |
---|
ECMAScript® 2025 Language Specification # sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget |