【JavaScript ECMAScript】Promise::Promise[Symbol.species]静的アクセサプロパティの使い方
Promise[Symbol.species]静的アクセサプロパティの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
Promise[Symbol.species]プロパティは、Promiseオブジェクトを継承して作成されたクラスが、then()やcatch()といったメソッドを呼び出した際に、その結果として生成される新しいPromiseインスタンスがどのコンストラクタ(設計図)から作られるべきかを定義するために用いられるプロパティです。
このプロパティは、JavaScriptの組み込みシンボルであるSymbol.speciesによって定義されており、クラスが自身の派生クラスではなく、その元となるクラス(この場合はPromiseクラス)のインスタンスを生成するように指定することを可能にします。具体的には、開発者がPromiseクラスを継承して新しいカスタムクラス(例えばMyPromise)を作成し、そのMyPromiseのインスタンスに対してthen()メソッドを呼び出した場合、通常であればMyPromiseのインスタンスが返されることが期待されます。しかし、Promise[Symbol.species]が標準のPromiseクラスを指すように設定されているため、結果として返されるのは常に標準のPromiseインスタンスとなります。
これは、Promiseの振る舞いを予測可能に保ち、ライブラリやフレームワークなどがPromiseを扱う際に、常に標準のPromiseの機能に依存できるようにするために非常に重要です。カスタムのPromiseクラスが意図しない挙動を引き起こすことを防ぎ、システム全体の安定性と互換性を維持する役割を果たします。開発者が独自のPromise派生クラスを使用する際でも、結果の型が標準Promiseに固定されるため、安心して扱うことができます。
構文(syntax)
1class MyPromise extends Promise { 2 static get [Symbol.species]() { 3 return Promise; 4 } 5}
引数(parameters)
引数なし
引数はありません
戻り値(return)
Promise
Promise[Symbol.species] は、Promise のサブクラスが Promise を生成する際に、どの Promise コンストラクタを使用するかを指定するための静的アクセサープロパティです。このプロパティは Promise を返します。