SharedArrayBuffer[Symbol.species]

Baseline 已廣泛支援

此功能已成熟,可在多種裝置和瀏覽器版本上使用。自 2021 年 12 月以來,它已在所有瀏覽器中可用。

SharedArrayBuffer[Symbol.species] 靜態訪問器屬性用於返回構造 SharedArrayBuffer 方法的返回值時所使用的建構函式。

警告: [Symbol.species] 的存在允許執行任意程式碼,並可能產生安全漏洞。它還會使某些最佳化變得更加困難。引擎實現者正在 調查是否要移除此功能。如果可能,請避免依賴它。

語法

js
SharedArrayBuffer[Symbol.species]

返回值

呼叫 get [Symbol.species]this 的建構函式值。返回值用於構造建立新 array buffer 的 array buffer 方法的返回值。

描述

[Symbol.species] 訪問器屬性返回 SharedArrayBuffer 物件的預設建構函式。子類建構函式可以覆蓋它來更改建構函式分配。預設實現基本上是

js
// Hypothetical underlying implementation for illustration
class SharedArrayBuffer {
  static get [Symbol.species]() {
    return this;
  }
}

由於這種多型實現,派生子類的 [Symbol.species] 預設情況下也將返回建構函式本身。

js
class SubArrayBuffer extends SharedArrayBuffer {}
SubArrayBuffer[Symbol.species] === SubArrayBuffer; // true

當呼叫不修改現有陣列但返回新 array buffer 例項的 array buffer 方法(例如,slice())時,將訪問陣列的 constructor[Symbol.species]。返回的建構函式將用於構造 array buffer 方法的返回值。

示例

普通物件中的 species

[Symbol.species] 屬性返回預設建構函式,即 SharedArrayBufferSharedArrayBuffer 建構函式。

js
SharedArrayBuffer[Symbol.species]; // function SharedArrayBuffer()

派生物件中的 species

在自定義 SharedArrayBuffer 子類的例項中,例如 MySharedArrayBufferMySharedArrayBuffer 的 species 是 MySharedArrayBuffer 建構函式。但是,您可能希望覆蓋它,以便在派生類方法中返回父 SharedArrayBuffer 物件。

js
class MySharedArrayBuffer extends SharedArrayBuffer {
  // Overwrite MySharedArrayBuffer species to the parent SharedArrayBuffer constructor
  static get [Symbol.species]() {
    return SharedArrayBuffer;
  }
}

規範

規範
ECMAScript® 2026 語言規範
# sec-sharedarraybuffer-%symbol.species%

瀏覽器相容性

另見