ArrayBuffer[Symbol.species]
ArrayBuffer[Symbol.species] 靜態訪問器屬性返回用於構造 ArrayBuffer 方法返回值的建構函式。
警告: [Symbol.species] 的存在允許執行任意程式碼,並可能產生安全漏洞。它還會使某些最佳化變得更加困難。引擎實現者正在 調查是否要移除此功能。如果可能,請避免依賴它。
語法
js
ArrayBuffer[Symbol.species]
返回值
呼叫 get [Symbol.species] 時建構函式 (this) 的值。返回值用於構造建立新 ArrayBuffer 的 ArrayBuffer 方法的返回值。
描述
[Symbol.species] 訪問器屬性返回 ArrayBuffer 物件的預設建構函式。子類建構函式可以覆蓋它以更改建構函式分配。預設實現基本上是
js
// Hypothetical underlying implementation for illustration
class ArrayBuffer {
static get [Symbol.species]() {
return this;
}
}
由於這種多型實現,派生子類的 [Symbol.species] 預設情況下也將返回建構函式本身。
js
class SubArrayBuffer extends ArrayBuffer {}
SubArrayBuffer[Symbol.species] === SubArrayBuffer; // true
當呼叫不修改現有物件但返回新 ArrayBuffer 例項的 ArrayBuffer 方法(例如,slice())時,將訪問該物件的 constructor[Symbol.species]。返回的建構函式將用於構造 ArrayBuffer 方法的返回值。
示例
普通物件中的 species
[Symbol.species] 屬性返回預設建構函式,即 ArrayBuffer 的 ArrayBuffer 建構函式。
js
ArrayBuffer[Symbol.species]; // function ArrayBuffer()
派生物件中的 species
在自定義 ArrayBuffer 子類的例項中,例如 MyArrayBuffer,MyArrayBuffer 的 species 是 MyArrayBuffer 建構函式。但是,您可能希望覆蓋此設定,以便在派生類方法中返回父 ArrayBuffer 物件。
js
class MyArrayBuffer extends ArrayBuffer {
// Overwrite MyArrayBuffer species to the parent ArrayBuffer constructor
static get [Symbol.species]() {
return ArrayBuffer;
}
}
規範
| 規範 |
|---|
| ECMAScript® 2026 語言規範 # sec-get-arraybuffer-%symbol.species% |
瀏覽器相容性
載入中…