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.
The handler.construct()
method is a trap for the [[Construct]]
object internal method, which is used by operations such as the new
operator. In order for the new operation to be valid on the resulting Proxy object, the target used to initialize the proxy must itself be a valid constructor.
Try it
Syntax
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
Array
containing 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
new
operator:new myFunction(...args)
Reflect.construct()
Or any other operation that invokes the [[Construct]]
internal method.
Invariants
Examples
Trapping the new operator
The following code traps the new
operator.
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.
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.
const p = new Proxy(
{},
{
construct(target, argumentsList, newTarget) {
return {};
},
},
);
new p(); // TypeError is thrown, "p" is not a constructor
Specifications
Specification |
---|
ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget |
Browser compatibility
BCD tables only load in the browser