【JavaScript ECMAScript】TypedArray::TypedArray[Symbol.species]静的アクセサプロパティの使い方
TypedArray[Symbol.species]静的アクセサプロパティの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
TypedArray[Symbol.species]プロパティは、TypedArrayの派生クラスがそのメソッドを通じて新しいインスタンスを生成する際に、どのコンストラクタを使用すべきかを指定するコンストラクタ関数を保持するプロパティです。JavaScriptにおけるTypedArrayは、固定長のバイナリデータを効率的に扱うための特殊な配列オブジェクト群(例えばInt8ArrayやUint8Arrayなど)の基底クラスです。
この[Symbol.species]は、JavaScriptに組み込まれている「Well-known Symbol」と呼ばれる特別な記号の一つで、オブジェクトのコンストラクタが新しいインスタンスを作成する際の挙動をカスタマイズするために使用されます。TypedArrayのサブクラスは、例えばsliceメソッドなどのインスタンスメソッドを実行して新しい配列を生成する際、デフォルトでは自身のコンストラクタを利用して同じ型の新しいTypedArrayインスタンスを返します。
TypedArray[Symbol.species]プロパティは、まさにこの挙動を保証し、TypedArrayのサブクラスが常に自身のコンストラクタを「推奨」するように機能します。これにより、Int8ArrayのsliceメソッドがInt8Arrayを、Uint8ArrayのsliceメソッドがUint8Arrayを返すといった、期待される型安全な動作が実現されます。開発者がこのプロパティをオーバーライドすることで、特定の派生クラスのインスタンスメソッドが、標準とは異なるカスタムコンストラクタを用いて新しいインスタンスを生成するように変更することも可能です。この仕組みは、高度なクラス設計において非常に有用です。
構文(syntax)
1class MyTypedArray extends Int8Array { 2 static get [Symbol.species]() { 3 return Int8Array; 4 } 5}
引数(parameters)
引数なし
引数はありません
戻り値(return)
Function
TypedArray[Symbol.species]は、Array.prototype.mapやArray.prototype.filterなどのメソッドが、元のTypedArrayと同じ型で新しいTypedArrayを生成するために使用するコンストラクタ関数を返します。