← 返回首页
handler.construct() - JavaScript | MDN

このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

handler.construct()

Baseline 広く利用可能

この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2016年9月以降、すべてのブラウザーで利用可能です。

handler.construct() メソッドは、オブジェクトの [[Construct]] 内部メソッドに対するトラップです。new 演算子などの操作で使用されます。結果としてのプロキシーオブジェクトが new 演算子を使用できるようにするためには、プロキシーを初期化するために使用されるターゲット自体が有効なコンストラクターである必要があります。

目次

試してみましょう

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"

構文

js
new Proxy(target, { construct(target, argumentsList, newTarget) { } })

引数

次の引数が construct() メソッドに渡されます。 this はハンドラーにバインドされます。

target

ターゲットのコンストラクターオブジェクトです。

argumentsList

コンストラクターに渡された引数の入った配列 (Array) です。

newTarget

呼び出された元のコンストラクターです。

返値

construct メソッドは新しく作成されたオブジェクトを表すオブジェクトを返す必要があります。

解説

介入

このトラップは下記の操作に介入できます。

他にも、[[Construct]] 内部メソッドを呼び出すあらゆる操作に介入できます。

不変条件

プロキシーの [[Construct]] 内部メソッドは、以下の不変条件に違反している場合、呼び出されるとトラップで TypeError が発生します。

  • target がコンストラクター自身でなければならない。
  • 返値は Object でなければならない。

new 演算子のトラップ

次のコードでは new 操作をトラップします。

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

次のコードでは不変条件に違反します。

js
const p = new Proxy(function () {}, { construct(target, argumentsList, newTarget) { return 1; }, }); new p(); // TypeError is thrown

次のコードはプロキシーを正しく初期化していません。プロキシーの target の初期化は、それ自身が new 演算子に有効なコンストラクターでなければなりません。

js
const p = new Proxy( {}, { construct(target, argumentsList, newTarget) { return {}; }, }, ); new p(); // TypeError is thrown, "p" is not a constructor

仕様書

仕様書
ECMAScript® 2027 Language Specification
# sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget

ブラウザーの互換性

ブラウザー互換性一覧表を表示するには、JavaScript を有効にしてください。

関連情報