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 | |
---|---|
Schreibbar | nein |
Aufzählbar | nein |
Konfigurierbar | nein |
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:
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 GitHubdesktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
species |
Legend
Tip: you can click/tap on a cell for more information.
- Full support
- Full support