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.

Die statische Dateneigenschaft Symbol.species repräsentiert das bekannte Symbol Symbol.species. Methoden, die Kopien eines Objekts erstellen, können dieses Symbol im Objekt nachschlagen, um die Konstruktorfunktion zu verwenden, die bei der Erstellung der Kopie verwendet werden soll.

Warnung: Die Existenz von [Symbol.species] erlaubt die Ausführung von beliebigem Code und kann Sicherheitslücken schaffen. Außerdem erschwert sie bestimmte Optimierungen erheblich. 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 bekannte Symbol Symbol.species.

Eigenschaften von Symbol.species
Schreibbarnein
Aufzählbarnein
Konfigurierbarnein

Beschreibung

Die [Symbol.species] Accessor-Eigenschaft erlaubt Unterklassen, den Standardkonstruktor für Objekte zu überschreiben. Dies legt ein Protokoll fest, wie Instanzen kopiert werden sollen. Zum Beispiel verwendet die Methode map() bei Arrays, die Kopiermethoden nutzen, instance.constructor[Symbol.species], um den Konstruktor zum Erstellen des neuen Arrays zu erhalten. Weitere Informationen finden Sie unter Built-ins erweitern.

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

Beispiele

Verwendung von species

Es kann sein, dass Sie in Ihrer abgeleiteten Array-Klasse MyArray Array-Objekte zurückgeben möchten. Zum Beispiel möchten Sie bei der Verwendung von Methoden wie map(), die den Standardkonstruktor zurückgeben, dass diese Methoden ein übergeordnetes Array-Objekt anstelle eines MyArray-Objekts zurückgeben. Das species-Symbol ermöglicht 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® 2025 Language Specification
# sec-symbol.species

Browser-Kompatibilität

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

Siehe auch