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 zu verwendende Konstruktorfunktion beim Erstellen der Kopie zu erhalten.

Warnung: Die Existenz von [Symbol.species] erlaubt die Ausführung von beliebigem Code und kann Sicherheitslücken erzeugen. Sie erschwert auch bestimmte Optimierungen erheblich. Entwickler von Engines untersuchen derzeit, ob diese Funktion entfernt werden soll. Vermeiden Sie es, sich darauf zu verlassen, wenn möglich.

Probieren Sie es aus

Wert

Das bekannte Symbol Symbol.species.

Eigenschaften der Symbol.species-Property
Schreibbar nein
Aufzählbar nein
Konfigurierbar nein

Beschreibung

Die [Symbol.species] Zugriffseigenschaft erlaubt es Unterklassen, den Standardkonstruktor für Objekte zu überschreiben. Dies legt ein Protokoll darüber fest, wie Instanzen kopiert werden sollten. Wenn Sie zum Beispiel Kopiermethoden von Arrays verwenden, wie map(), verwendet die map()-Methode instance.constructor[Symbol.species], um den Konstruktor zum Erstellen des neuen Arrays zu erhalten. Weitere Informationen finden Sie unter Unterklassen von eingebauten Objekten.

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 abgeleiteter Klassen anstelle der Basisklasse zu erstellen – zum Beispiel wird map() ein Array desselben Typs wie das ursprüngliche Array zurückgeben.

Beispiele

Verwendung von species

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

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch