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