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 December 2021.

SharedArrayBuffer[Symbol.species] 静态访问器属性返回用于构造 SharedArrayBuffer 方法返回值的构造函数。

警告: [Symbol.species] 的存在允许任意代码的执行,这可能导致安全漏洞。它还使某些优化变得更加困难。引擎实现者正在调查是否要移除此特性。如果可能,请避免依赖它。

语法

js
SharedArrayBuffer[Symbol.species]

返回值

调用 get [Symbol.species] 构造函数(this)的值。返回值用于构造创建新数组缓冲区的数组缓冲区方法的返回值。

描述

[Symbol.species] 访问器属性返回 SharedArrayBuffer 对象的构造函数。子类构造函数可以重写它来改变构造函数赋值。默认实现大概是:

js
// 用于说明而假设的底层实现
class SharedArrayBuffer {
  static get [Symbol.species]() {
    return this;
  }
}

由于这种多态实现,默认情况下,派生子类的 [Symbol.species] 也会返回自身的构造函数。

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

在调用不会更改现有数组,而是返回一个新的数组缓冲实例的方法(例如,slice())时,该数组的 constructor[Symbol.species] 会被访问。返回的构造函数将被用于构造该数组缓冲区方法的返回值。

示例

普通对象中的 species

[Symbol.species] 属性返回默认的构造函数,即 SharedArrayBuffer 的构造函数 SharedArrayBuffer

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

派生对象中的 species

在自定义的 SharedArrayBuffer 子类实例中,例如 MySharedArrayBufferMySharedArrayBuffer 的 species 是 MySharedArrayBuffer 构造函数。但是,你可能希望重写它,以便在派生类方法中返回父类 SharedArrayBuffer 对象:

js
class MySharedArrayBuffer extends SharedArrayBuffer {
  // 重写 MySharedArrayBuffer species 来返回父类 SharedArrayBuffer 构造函数
  static get [Symbol.species]() {
    return SharedArrayBuffer;
  }
}

规范

Specification
ECMAScript® 2025 Language Specification
# sec-sharedarraybuffer-%symbol.species%

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
[Symbol.species]

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support

参见