get SharedArrayBuffer[@@species]

SharedArrayBuffer[@@species] 访问器属性返回用于从 SharedArrayBuffer 方法构造返回值的构造函数。

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


Syntax

SharedArrayBuffer[Symbol.species]

返回值:调用了 get@@species 的构造函数( this )的值。返回值用于从创建新数组缓冲区的数组缓冲区方法构造返回值。


描述

@@species 访问器属性返回 SharedArray Buffer 对象的默认构造函数。子类构造函数可以重写它以更改构造函数赋值。默认实现基本上是:

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

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

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

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


实例

Species in ordinary objects

@@species 属性返回默认构造函数函数,该函数是 SharedArray Buffer SharedArrayBuffer 构造函数。

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


Species in derived objects

在自定义 SharedArray Buffer 子类的实例中,例如 MySharedArray Buffer MySharedArrayBuffer species是 mySharedArray Buffer 构造函数。但是,为了在派生类方法中返回父级 SharedArrayBuffer 对象,您可能需要覆盖此对象:

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