SharedArrayBuffer[Symbol.species]
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2021年12月.
SharedArrayBuffer[Symbol.species] アクセサープロパティは、SharedArrayBuffer の各メソッドから返される値を作成するために使用されるコンストラクター(種)を返します。
警告:
[Symbol.species] が存在すると、任意のコードの実行が可能になり、セキュリティ上の脆弱性が生じる可能性があります。また、ある種の最適化も非常に難しくなります。エンジンの実装者たちは、この機能を削除するかどうか調査しています。可能であれば、この機能に頼ることは避けてください。
構文
SharedArrayBuffer[Symbol.species]
返値
get [Symbol.species] が呼び出されたコンストラクター (this) の値です。この返値は、新しい配列バッファーを作成するための配列バッファーのメソッドから返される値を構成するために使用されます。
解説
[Symbol.species] アクセサープロパティは SharedArrayBuffer オブジェクトの既定のコンストラクターを返します。サブクラスのコンストラクターはこれを上書きして、コンストラクターの割り当てを変更することができます。既定の実装では、基本的に次のようになります。
// 説明のための仮想的な基礎実装
class SharedArrayBuffer {
static get [Symbol.species]() {
return this;
}
}
この多態的な実装のため、派生したサブクラスの [Symbol.species] も既定でコンストラクター自身を返すことになります。
class SubArrayBuffer extends SharedArrayBuffer {}
SubArrayBuffer[Symbol.species] === SubArrayBuffer; // true
既存の配列を変更せず、新しい配列バッファーのインスタンスを返す配列バッファーのメソッド(例えば slice())を呼び出すと、その配列の constructor[Symbol.species] にアクセスすることになります。返されたコンストラクターは配列バッファーメソッドの返値を構築するために使用されます。
例
>通常のオブジェクトにおける種
[Symbol.species] プロパティは、既定のコンストラクター関数、つまり SharedArrayBuffer であれば SharedArrayBuffer コンストラクターが返されます。
SharedArrayBuffer[Symbol.species]; // function SharedArrayBuffer()
派生オブジェクトにおける種
独自の SharedArrayBuffer サブクラスのインスタンス、例えば MySharedArrayBuffer では、その MySharedArrayBuffer の種は MySharedArrayBuffer コンストラクターになります。しかし、派生クラスのメソッドで親の SharedArrayBuffer オブジェクトを返すために、これを上書きしたいと思うかもしれません。
class MySharedArrayBuffer extends SharedArrayBuffer {
// 種を MySharedArrayBuffer から親である SharedArrayBuffer コンストラクターで上書きする。
static get [Symbol.species]() {
return SharedArrayBuffer;
}
}
仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-sharedarraybuffer-%symbol.species%> |
ブラウザーの互換性
Loading…