Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【JavaScript ECMAScript】Reflect::Reflect.construct静的メソッドの使い方

Reflect.construct()静的メソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

Reflect.construct()メソッドは、new 演算子と同じようにコンストラクター関数から新しいインスタンスを生成するメソッドです。

このメソッドは、指定されたコンストラクター関数を、与えられた引数のリストとともに呼び出し、新しいオブジェクトインスタンスを作成します。基本的な機能は new 演算子と似ていますが、Reflect.construct()はより高度で柔軟なオブジェクト生成の制御を可能にする点が特徴です。

特に重要なのは、オプションの newTarget 引数を使用できる点です。newTarget は、コンストラクター内部で参照される new.target の値を指定します。new.target とは、new 演算子で呼び出されたコンストラクター関数が何であったかを内部的に示す特別なプロパティです。Reflect.construct()を使うと、実際にインスタンスを生成するコンストラクター関数とは異なる関数を new.target の値として設定できるため、オブジェクトのプロトタイプチェーンや初期化の動作を細かくカスタマイズできます。

この機能は、JavaScriptのプロキシ機能を使ったメタプログラミングや、継承関係が複雑なクラス設計において、基底クラスのコンストラクターを呼び出しながら、異なる派生クラスのインスタンスとして振る舞わせるといった高度なシナリオで非常に役立ちます。これにより、JavaScriptのオブジェクト生成プロセスに対するより深い制御と、強力な抽象化を実現することが可能になります。

公式リファレンス: Reflect.construct()

構文(syntax)

1class MyClass {
2  constructor(value1, value2) {
3    this.property1 = value1;
4    this.property2 = value2;
5  }
6}
7
8const args = ['Hello', 123];
9const instance = Reflect.construct(MyClass, args);
10
11// instance は new MyClass('Hello', 123) と同じオブジェクトになります
12// console.log(instance.property1); // 'Hello'
13// console.log(instance.property2); // 123

引数(parameters)

target, argumentsList, newTarget

  • target: newTarget によって生成されるオブジェクトのコンストラクタ関数
  • argumentsList: target のコンストラクタに渡される引数の配列
  • newTarget: target を呼び出すために使用されるコンストラクタ(通常は newTarget が指定されない場合は target と同じ)

戻り値(return)

Object

指定されたコンストラクタ関数を new 演算子を用いて呼び出した結果である、新しいオブジェクトを返します。

関連コンテンツ