Baseline Widely available
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 Ziel, das verwendet wird, um den Proxy zu initialisieren, selbst ein gültiger Konstruktor sein.
function Monster(disposition) {
this.disposition = disposition;
}
const handler = {
construct(target, args) {
console.log(`Creating a ${target.name}`);
// Expected output: "Creating a monster"
return new target(...args);
},
};
const ProxiedMonster = new Proxy(Monster, handler);
console.log(new ProxiedMonster("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-Konstruktorobjekt.
argumentsList
Ein Array
, das die an den Konstruktor übergebenen Argumente enthält.
newTarget
Der Konstruktor, der ursprünglich aufgerufen wurde.
Die construct()
Methode muss ein Objekt zurückgeben, das das neu erstellte Objekt darstellt.
Diese Falle kann folgende Operationen abfangen:
new
Operator: new myFunction(...args)
Reflect.construct()
Oder jede andere Operation, die die [[Construct]]
interne Methode aufruft.
Die [[Construct]]
interne Methode des Proxys wirft einen TypeError
, wenn die Handler-Definition eine der folgenden Invarianten verletzt:
target
muss selbst ein Konstruktor sein.Object
sein.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 unsachgemäÃ. Das target
bei 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 Browser-Kompatibilität Siehe auch
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4