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.
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 bei der Erstellung der Kopie zu bestimmen.
Warnung:
Die Existenz von [Symbol.species]
ermöglicht die Ausführung von beliebigem Code und kann Sicherheitslücken schaffen. Außerdem erschwert sie 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
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 Zugriffsoroeigenschaft [Symbol.species]
erlaubt es Unterklassen, den Standardkonstruktor für Objekte zu überschreiben. Dies spezifiziert ein Protokoll darüber, wie Instanzen kopiert werden sollten. Wenn Sie beispielsweise Kopiermethoden von Arrays verwenden, wie map()
, verwendet die Methode map()
instance.constructor[Symbol.species]
, um den Konstruktor für die Erstellung des neuen Arrays zu erhalten. Weitere Informationen finden Sie unter Vererbung eingebauter Objekte.
Alle eingebauten Implementierungen von [Symbol.species]
geben den this
-Wert zurück, der der Konstruktor der aktuellen Instanz ist. Dadurch können Kopiermethoden Instanzen von abgeleiteten Klassen anstelle der Basisklasse erstellen - zum Beispiel wird map()
ein Array des gleichen 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 möchten Sie, wenn Sie Methoden wie map()
verwenden, die den Standardkonstruktor zurückgeben, dass diese Methoden ein übergeordnetes Array
-Objekt zurückgeben, anstatt eines MyArray
-Objekts. Das species
-Symbol ermöglicht es Ihnen, dies zu tun:
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 |