ArrayBuffer[Symbol.species]

Baseline 已广泛支持

此特性已非常成熟,可在多种设备和浏览器版本上使用。自 ⁨2016 年 9 月⁩以来,它已在各大浏览器中可用。

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] 属性返回默认构造函数,即 ArrayBufferArrayBuffer 构造函数。

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

派生对象中的 species

在自定义 ArrayBuffer 子类的实例中,例如 MyArrayBufferMyArrayBuffer 的 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%

浏览器兼容性

另见