【JSリファレンス】get Promise[@@species]

更新日:2024/06/14

get Promise[@@species]は、Promiseコンストラクターアクセサプロパティです。
このプロパティはセッターが定義されていないため、取得のみ行えます。

@@speciesは仕様上の表記です。
プログラムコード上ではSymbol.speciesに置き換えられます。

[ Symbol.species ]は、インスタンスを返すprototypeメソッド等で使用するコンストラクターがセットされています。
class構文等で[Symbol.species]を上書きすることでメソッド内で生成されるオブジェクトを変更できます。

Promise[Symbol.species]は、this値を返します。

 

■Promise[Symbol.species]を参照するメソッド

Promise.prototype.catch()
Promise.prototype.finally()
Promise.prototype.then()

 

■使用例

  // [Symbol.species]なし
const MyPromise1 = class extends Promise{
    constructor(...a){
        super(...a);
    }
    toString(){ return "MyPromise"; }
}
  // then() は、MyPromise1を返す
const promise1 = new MyPromise1(()=>{}).then(()=>{});
console.log( promise1.toString() ); // MyPromise


  // [Symbol.species]あり
const MyPromise2 = class extends Promise{
    constructor(...a){
        super(...a);
    }
    static get [Symbol.species](){ return Promise; }
    toString(){ return "MyPromise"; }
}
  // then() は、Promiseを返す
const promise2 = new MyPromise2(()=>{}).then(()=>{});
console.log( promise2.toString() ); // [object Promise]

更新日:2024/06/14

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://jsref.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。