The handler.construct()
method is a trap for the <span class="selflink">Construct</span>
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.
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 object.
argumentsList
- : The list of arguments for the constructor.
newTarget
- : The constructor that was originally called.
Return value
The construct
method must return an object.
Description
Interceptions
This trap can intercept these operations:
- The
new
operator:new myFunction(...args)
- Reflect.construct
Or any other operation that invokes the <span class="selflink">Construct</span>
internal method.
Invariants
If the following invariants are violated, the trap throws a TypeError when invoked.
- The result must be an
Object
.
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