handler.construct() - JavaScript | MDN
Try it
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
js
new Proxy(target, {
construct(target, argumentsList, newTarget) {
}
})
Parameters
The following parameters are passed to the construct() method. this is bound to the handler.
target-
The target constructor object.
argumentsList-
An
Arraycontaining the arguments passed to the constructor. newTarget-
The constructor that was originally called.
Return value
The construct() method must return an object, representing the newly created object.
Description
Interceptions
This trap can intercept these operations:
- The
newoperator:new myFunction(...args) Reflect.construct()
Or any other operation that invokes the [[Construct]] internal method.
Invariants
The proxy's [[Construct]] internal method throws a TypeError if the handler definition violates one of the following invariants:
- The
targetmust be a constructor itself. - The result must be an
Object.
Examples
Trapping the new operator
The following code traps the new operator.
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
The following code violates the invariant.
js
const p = new Proxy(function () {}, {
construct(target, argumentsList, newTarget) {
return 1;
},
});
new p(); // TypeError is thrown
The following code improperly initializes the proxy. The target in Proxy initialization must itself be a valid constructor for the new operator.
js
const p = new Proxy(
{},
{
construct(target, argumentsList, newTarget) {
return {};
},
},
);
new p(); // TypeError is thrown, "p" is not a constructor
Specifications
| Specification |
|---|
| ECMAScript® 2027 Language Specification # sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget |