Promise[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 January 2020.
Die statische Zugriffs-Eigenschaft Promise[Symbol.species]
gibt den Konstruktor zurück, der verwendet wird, um Rückgabewerte von Promise-Methoden zu konstruieren.
Warnung:
Die Existenz von [Symbol.species]
ermöglicht die Ausführung von beliebigem Code und kann Sicherheitslücken schaffen. Sie erschwert auch gewisse Optimierungen erheblich. Engine-Implementierer untersuchen ob diese Funktion entfernt werden soll. Vermeiden Sie es, sich darauf zu verlassen, wenn möglich.
Syntax
Promise[Symbol.species]
Rückgabewert
Der Wert des Konstruktors (this
), auf dem get [Symbol.species]
aufgerufen wurde. Der Rückgabewert wird verwendet, um Rückgabewerte von Promiseketten-Methoden zu konstruieren, die neue Promises erzeugen.
Beschreibung
Die [Symbol.species]
-Zugriffseigenschaft gibt den Standardkonstruktor für Promise
-Objekte zurück. Unterklasse-Konstruktoren können ihn überschreiben, um die Konstruktorzuweisung zu ändern. Die Standardimplementierung ist im Wesentlichen:
// Hypothetical underlying implementation for illustration
class Promise {
static get [Symbol.species]() {
return this;
}
}
Aufgrund dieser polymorphen Implementierung würde [Symbol.species]
von abgeleiteten Unterklassen standardmäßig ebenfalls den Konstruktor selbst zurückgeben.
class SubPromise extends Promise {}
SubPromise[Symbol.species] === SubPromise; // true
Promise-Ketten-Methoden — then()
, catch()
und finally()
— geben neue Promise-Objekte zurück. Sie erhalten den Konstruktor, um das neue Promise zu konstruieren, durch this.constructor[Symbol.species]
. Wenn this.constructor
undefined
ist oder wenn this.constructor[Symbol.species]
undefined
oder null
ist, wird der Standard-Promise()
-Konstruktor verwendet. Andernfalls wird der durch this.constructor[Symbol.species]
zurückgegebene Konstruktor verwendet, um das neue Promise-Objekt zu konstruieren.
Beispiele
Species in gewöhnlichen Objekten
Die Symbol.species
-Eigenschaft gibt die Standard-Konstruktorfunktion zurück, die der Promise
-Konstruktor für Promise
ist.
Promise[Symbol.species]; // [Function: Promise]
Species in abgeleiteten Objekten
In einer Instanz einer benutzerdefinierten Promise
-Unterklasse wie MyPromise
ist das MyPromise
-Species der MyPromise
-Konstruktor. Allerdings möchten Sie dies vielleicht überschreiben, um in Ihren abgeleiteten Klassenmethoden übergeordnete Promise
-Objekte zurückzugeben.
class MyPromise extends Promise {
// Override MyPromise species to the parent Promise constructor
static get [Symbol.species]() {
return Promise;
}
}
Standardmäßig würden Promise-Methoden Promises vom Typ der Unterklasse zurückgeben.
class MyPromise extends Promise {
someValue = 1;
}
console.log(MyPromise.resolve(1).then(() => {}).someValue); // 1
Durch das Überschreiben von [Symbol.species]
werden die Promise-Methoden den Basis-Promise
-Typ zurückgeben.
class MyPromise extends Promise {
someValue = 1;
static get [Symbol.species]() {
return Promise;
}
}
console.log(MyPromise.resolve(1).then(() => {}).someValue); // undefined
Spezifikationen
Specification |
---|
ECMAScript® 2026 Language Specification # sec-get-promise-%symbol.species% |