SharedArrayBuffer[Symbol.species]
SharedArrayBuffer[Symbol.species] 静态访问器属性用于返回构造 SharedArrayBuffer 方法的返回值时所使用的构造函数。
警告: [Symbol.species] 的存在允许执行任意代码,并可能产生安全漏洞。它还会使某些优化变得更加困难。引擎实现者正在 调查是否要移除此功能。如果可能,请避免依赖它。
语法
js
SharedArrayBuffer[Symbol.species]
返回值
调用 get [Symbol.species] 时 this 的构造函数值。返回值用于构造创建新 array buffer 的 array buffer 方法的返回值。
描述
[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] === SubArrayBuffer; // true
当调用不修改现有数组但返回新 array buffer 实例的 array buffer 方法(例如,slice())时,将访问数组的 constructor[Symbol.species]。返回的构造函数将用于构造 array buffer 方法的返回值。
示例
普通对象中的 species
[Symbol.species] 属性返回默认构造函数,即 SharedArrayBuffer 的 SharedArrayBuffer 构造函数。
js
SharedArrayBuffer[Symbol.species]; // function SharedArrayBuffer()
派生对象中的 species
在自定义 SharedArrayBuffer 子类的实例中,例如 MySharedArrayBuffer,MySharedArrayBuffer 的 species 是 MySharedArrayBuffer 构造函数。但是,您可能希望覆盖它,以便在派生类方法中返回父 SharedArrayBuffer 对象。
js
class MySharedArrayBuffer extends SharedArrayBuffer {
// Overwrite MySharedArrayBuffer species to the parent SharedArrayBuffer constructor
static get [Symbol.species]() {
return SharedArrayBuffer;
}
}
规范
| 规范 |
|---|
| ECMAScript® 2026 语言规范 # sec-sharedarraybuffer-%symbol.species% |
浏览器兼容性
加载中…