Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

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

handler.construct()

BaselineWidely available

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

試してみましょう

function monster1(disposition) {  this.disposition = disposition;}const handler1 = {  construct(target, args) {    console.log(`Creating a ${target.name}`);    // Expected output: "Creating a monster1"    return new target(...args);  },};const proxy1 = new Proxy(monster1, handler1);console.log(new proxy1("fierce").disposition);// Expected output: "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

仕様書

Specification
ECMAScript® 2026 Language Specification
# sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget

ブラウザーの互換性

関連情報

Help improve MDN

Learn how to contribute.

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp