【JavaScript ECMAScript】RegExp::RegExp[Symbol.species]静的アクセサプロパティの使い方
RegExp[Symbol.species]静的アクセサプロパティの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
RegExp[Symbol.species]プロパティは、RegExpクラスにおいて、継承された派生クラスが新しいインスタンスを生成する際にどのコンストラクタ(オブジェクトを生成する関数)を使用すべきかという情報を保持するプロパティです。このプロパティはRegExpクラスの静的なアクセサープロパティとして定義されています。
JavaScriptでは、Symbol.speciesシンボルを利用することで、オブジェクトが自身をコピーしたり、関連する新しいインスタンスを作成したりするメソッドにおいて、どのコンストラクタ関数を使うかを制御できます。具体的には、String.prototype.match()やString.prototype.replace()といった文字列操作メソッドが正規表現オブジェクトを利用して結果を生成する際、内部でこのRegExp[Symbol.species]プロパティを参照し、生成される新しい正規表現オブジェクトの型を決定します。
RegExp[Symbol.species]は、デフォルトでRegExpコンストラクタ自身を返します。このため、RegExpのインスタンスを操作するメソッドが新しい正規表現オブジェクトを生成する必要がある場合でも、常に元のRegExpクラスのインスタンスが作成されるように保証されます。この仕組みは、RegExpを継承したカスタム正規表現クラスを作成する際に特に活用されます。カスタムクラスのメソッドが新しいインスタンスを生成する際に、親クラス(RegExp)ではなく、自分自身のカスタムクラスのインスタンスを返すようにカスタマイズしたい場合に役立ちます。これにより、独自の追加機能を持つ正規表現クラスを定義し、それが文字列操作メソッドで使われたときにも、新しく生成される正規表現がそのカスタムクラスの型であることを保証できます。
構文(syntax)
1RegExp[Symbol.species];
引数(parameters)
引数なし
引数はありません
戻り値(return)
Function
RegExp[Symbol.species] は、RegExp クラスのサブクラスを特定するために使用される、組み込みのアクセサープロパティです。このプロパティは、RegExp インスタンスの @@species getter を呼び出したときに、そのクラスのコンストラクタ関数を返します。