SharedArrayBuffer[Symbol.species]

基线 广泛可用

此功能已得到良好建立,并且可以在许多设备和浏览器版本中运行。它自以下日期起在浏览器中可用 2021 年 12 月.

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

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

语法

js
SharedArrayBuffer[Symbol.species]

返回值

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

描述

[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] === SharedArrayBuffer; // true

当调用不改变现有数组但返回新数组缓冲区实例的数组缓冲区方法(例如,slice())时,将访问数组的 constructor[Symbol.species]。返回的构造函数将用于构造数组缓冲区方法的返回值。

示例

普通对象中的种类

[Symbol.species] 属性返回默认的构造函数,对于 SharedArrayBuffer,该构造函数是 SharedArrayBuffer 构造函数。

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

派生对象中的种类

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

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

规范

规范
ECMAScript 语言规范
# sec-sharedarraybuffer-%symbol.species%

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅