【JavaScript ECMAScript】Symbol::Symbol.species静的データプロパティの使い方
Symbol.species静的データプロパティの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
Symbol.speciesプロパティは、オブジェクトを継承して新しいインスタンス(派生オブジェクト)を生成する際に、どのコンストラクタを使用すべきかを定義するためのWell-Known Symbolを保持するプロパティです。
このプロパティは、特にArray、RegExp、PromiseなどのJavaScriptのビルトインオブジェクトを継承してサブクラスを作成した場合に、そのサブクラスのインスタンスを返すようなメソッド(例えば、Array.prototype.map()やPromise.prototype.then())が、新しいインスタンスを作成する際にどのコンストラクタを使用するかを制御するために利用されます。
具体的には、派生クラスが自身の[Symbol.species]プロパティを実装し、そのクラスのコンストラクタを返すように設定している場合、メソッドが返す新しいインスタンスはその派生クラス自身のコンストラクタによって生成されます。これにより、派生クラスのインスタンスから呼び出されたメソッドが返す新しいインスタンスが、親クラスではなく、期待通りに自身のクラスの型を保持するようになります。
もし[Symbol.species]プロパティがnullやundefinedに設定されている場合、または実装されていない場合は、メソッドは元のオブジェクトのコンストラクタ(通常は基底クラスのコンストラクタ)を使用して新しいインスタンスを生成します。
このメカニズムは、JavaScriptにおける強力な継承を利用してカスタムクラスを開発する際に、生成されるオブジェクトの型が予期せぬものにならないよう、型の整合性を保つために非常に重要な役割を果たします。システムエンジニアを目指す上で、カスタムクラスの動作を正確に制御し、堅牢なアプリケーションを構築するために、このSymbol.speciesの理解は不可欠です。
構文(syntax)
1class MyClass { 2 static get [Symbol.species]() { 3 return this; 4 } 5}
引数(parameters)
引数なし
引数はありません
戻り値(return)
戻り値なし
戻り値はありません