handler.construct()
method is a trap for 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 have a
[[Construct]]
internal method (i.e.
new target
must be valid).
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
const p = new Proxy(target, {
construct: function(target, argumentsList, newTarget) {
}
});
The following parameters are passed to the
construct()
方法。
this
is bound to the handler.
target
The target object.
argumentsList
The list of arguments for the constructor.
newTarget
p
above.
construct
method must return an object.
handler.construct()
method is a trap for the
new
operator.
This trap can intercept these operations:
new Proxy(...args)
Reflect.construct()
If the following invariants are violated, the proxy will throw a
TypeError
:
Object
.
The following code traps the
new
operator.
const p = new Proxy(function() {}, {
construct: function(target, argumentsList, newTarget) {
console.log('called: ' + argumentsList.join(', '));
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: function(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: function(target, argumentsList, newTarget) {
return {};
}
});
new p(); // TypeError is thrown, "p" is not a constructor
| 规范 |
|---|
|
ECMAScript (ECMA-262)
The definition of '[[Construct]]' in that specification. |
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
construct
|
Chrome 49 | Edge 12 | Firefox 18 | IE No | Opera 36 | Safari 10 | WebView Android 49 | Chrome Android 49 | Firefox Android 18 | Opera Android 36 | Safari iOS 10 | Samsung Internet Android 5.0 | nodejs 6.0.0 |
完整支持
不支持
Proxy
handler
new
operator.
Reflect.construct()