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 2016.

Das statische Dateneigenschaft Symbol.species repräsentiert das wohlbekannte Symbol Symbol.species. Methoden, die Kopien eines Objekts erstellen, können auf dieses Symbol auf dem Objekt zugreifen, um die zu verwendende Konstruktorfunktion beim Erstellen der Kopie zu ermitteln.

Warnung: Die Existenz von [Symbol.species] ermöglicht die Ausführung von beliebigem Code und kann Sicherheitslücken schaffen. Sie macht auch bestimmte Optimierungen deutlich schwieriger. Implementierer von Engines untersuchen, ob dieses Feature entfernt werden soll. Vermeiden Sie es nach Möglichkeit, sich darauf zu verlassen.

Probieren Sie es aus

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

Wert

Das wohlbekannte Symbol Symbol.species.

Eigenschaften von Symbol.species
Schreibbarnein
Aufzählbarnein
Konfigurierbarnein

Beschreibung

Die [Symbol.species] Accessor-Eigenschaft erlaubt es Unterklassen, den Standardkonstruktor für Objekte zu überschreiben. Dies spezifiziert ein Protokoll darüber, wie Instanzen kopiert werden sollen. Wenn Sie beispielsweise Kopiermethoden von Arrays wie map() verwenden, nutzt die map()-Methode instance.constructor[Symbol.species], um den Konstruktor für das Erstellen des neuen Arrays zu erhalten. Für weitere Informationen siehe Unterklassen von Built-ins.

Alle eingebauten Implementierungen von [Symbol.species] geben den this-Wert zurück, welcher der Konstruktor der aktuellen Instanz ist. Dies ermöglicht es Kopiermethoden, Instanzen von abgeleiteten Klassen statt der Basisklasse zu erstellen — zum Beispiel wird map() ein Array desselben Typs wie das ursprüngliche Array zurückgeben.

Beispiele

Verwendung von Species

Möglicherweise möchten Sie in Ihrer abgeleiteten Array-Klasse MyArray Array-Objekte zurückgeben. Beispielsweise bei der Verwendung von Methoden wie map(), die den Standardkonstruktor zurückgeben, möchten Sie, dass diese Methoden ein Eltern-Array-Objekt statt eines MyArray-Objekts zurückgeben. Das species-Symbol ermöglicht Ihnen dies:

js
class MyArray extends Array {
  // Overwrite species to the parent Array constructor
  static get [Symbol.species]() {
    return Array;
  }
}
const a = new MyArray(1, 2, 3);
const mapped = a.map((x) => x * x);

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

Spezifikationen

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

Browser-Kompatibilität

Siehe auch