Symbol.species

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.

知名的 Symbol.species 是个函数值属性,其被构造函数用以创建派生对象。

尝试一下

Symbol.species 的属性特性
可写
可枚举
可配置

描述

species 访问器属性允许子类覆盖对象的默认构造函数。

示例

你可能想在扩展数组类 MyArray 上返回 Array 对象。例如,当使用例如 map() 这样的方法返回默认的构造函数时,你希望这些方法能够返回父级的 Array 对象,以取代 MyArray 对象。Symbol.species 允许你这么做:

js
class MyArray extends Array {
  // 覆盖 species 到父级的 Array 构造函数上
  static get [Symbol.species]() {
    return Array;
  }
}
var a = new MyArray(1, 2, 3);
var mapped = a.map((x) => x * x);

console.log(mapped instanceof MyArray); // false
console.log(mapped instanceof Array); // true

规范

Specification
ECMAScript Language Specification
# sec-symbol.species

浏览器兼容性

BCD tables only load in the browser

参见