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.

O símbolo Symbol.species especifica uma propriedade valor-função que a função construtora usa para criar objetos derivados.

Experimente

class Array1 extends Array {
  static get [Symbol.species]() {
    return Array;
  }
}

const a = new Array1(1, 2, 3);
const mapped = a.map((x) => x * x);

console.log(mapped instanceof Array1);
// Expected output: false

console.log(mapped instanceof Array);
// Expected output: true

Descrição

A propriedade acessora de espécies permite que subclasses substituam o construtor padrão para objetos.

Property attributes of Symbol.species
Writableno
Enumerableno
Configurableno

Exemplos

Usando espécies

Você pode querer que retorne objetos Array em sua class derivada de array MyArray. Por exemplo, quando usar métodos tais como map() que retorna o construtor padrão, você quer que esses métodos retornem um objeto Array pai, em vez do objeto MyArray. Esses símbolos espécies permitem que você fala isso:

js
class MyArray extends Array {
  // Substitui espécies para a Array pai construtora
  static get [Symbol.species]() {
    return Array;
  }
}
let a = new MyArray(1, 2, 3);
let mapped = a.map((x) => x * x);

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

Especificações

Specification
ECMAScript® 2025 Language Specification
# sec-symbol.species

Compatibilidade com navegadores

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
species

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Veja também