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

【Node.js24.x】Symbol::species定数の使い方

species定数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

Symbol.species定数は、派生クラス(他のクラスから機能を受け継いで作られたクラス)から新しいインスタンス(オブジェクト)が生成される際、どのコンストラクタ(オブジェクトを生成するための設計図)を使うかを制御するために利用される特別な定数です。

JavaScriptの組み込みオブジェクトには、ArrayPromiseのように、元のインスタンスから新しいインスタンスを生成するメソッド(例えばArray.prototype.map()Promise.prototype.then()など)を持つものがあります。これらの組み込みクラスを継承して独自のクラスを作成した場合、通常、それらのメソッドが返す新しいインスタンスは、継承元の組み込みクラスの型になってしまうことがあります。例えば、MyArrayというArrayを継承したクラスでmapメソッドを使用すると、結果はArrayのインスタンスとして返される、といった具合です。

Symbol.speciesは、このような挙動をカスタマイズするために使われます。クラスにSymbol.speciesを設定することで、そのクラスのメソッドが新しいインスタンスを生成する際に、派生元の組み込みクラスではなく、その派生クラス自身のコンストラクタによって新しいインスタンスが生成されるように指示できます。

これにより、開発者が作成したカスタムクラスの特性やメソッドを維持したまま、組み込みメソッドが正しく機能するようになります。オブジェクト指向プログラミングにおいて、継承を利用して独自の型を作成した際に、その型が期待通りに動作し続けるための重要な仕組みとして機能し、型の整合性を保つ上で非常に役立ちます。

構文(syntax)

1class MyArray extends Array {
2  static get [Symbol.species]() {
3    return Array;
4  }
5}

引数(parameters)

引数なし

引数はありません

戻り値(return)

symbol

Symbol.speciesは、組み込みオブジェクトが、そのオブジェクトのサブクラスのコンストラクタを返すために使用されるシンボルです。これにより、Array.prototype.mapなどのメソッドは、元の配列のサブクラスのインスタンスを返すことが保証されます。

関連コンテンツ