このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
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 2016年9月.
handler.construct() メソッドは、オブジェクトの[[Construct]]内部メソッドに対するトラップです。new 演算子などの操作で使用されます。結果としてのプロキシーオブジェクトが new 演算子を使用できるようにするためには、プロキシーを初期化するために使用されるターゲット自体が有効なコンストラクターである必要があります。
In this article
試してみましょう
function Monster(disposition) { this.disposition = disposition;}const handler = { construct(target, args) { console.log(`Creating a ${target.name}`); // 予想される結果: "Creating a monster1" return new target(...args); },};const ProxiedMonster = new Proxy(Monster, handler);console.log(new ProxiedMonster("fierce").disposition);// 予想される結果: "fierce"構文
new Proxy(target, { construct(target, argumentsList, newTarget) { }})引数
次の引数がconstruct() メソッドに渡されます。this はハンドラーにバインドされます。
targetターゲットのコンストラクターオブジェクトです。
argumentsListコンストラクターに渡された引数の入った配列 (
Array) です。newTarget呼び出された元のコンストラクターです。
返値
construct メソッドは新しく作成されたオブジェクトを表すオブジェクトを返す必要があります。
解説
>介入
このトラップは下記の操作に介入できます。
- The
new演算子:new myFunction(...args) Reflect.construct()
他にも、[[Construct]]内部メソッドを呼び出すあらゆる操作に介入できます。
不変条件
プロキシーの[[Construct]] 内部メソッドは、以下の不変条件に違反している場合、呼び出されるとトラップでTypeError が発生します。
targetがコンストラクター自身でなければならない。- 返値は
Objectでなければならない。
例
>new 演算子のトラップ
次のコードではnew 操作をトラップします。
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次のコードでは不変条件に違反します。
const p = new Proxy(function () {}, { construct(target, argumentsList, newTarget) { return 1; },});new p(); // TypeError is thrown次のコードはプロキシーを正しく初期化していません。プロキシーのtarget の初期化は、それ自身がnew 演算子に有効なコンストラクターでなければなりません。
const p = new Proxy( {}, { construct(target, argumentsList, newTarget) { return {}; }, },);new p(); // TypeError is thrown, "p" is not a constructor仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget> |