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

【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に固定されるため、安心して扱うことができます。

公式リファレンス: Promise[Symbol.species]

構文(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 を返します。

関連コンテンツ