Generator
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.
Das Generator-Objekt wird von einer Generator-Funktion zurückgegeben und entspricht sowohl dem iterablen Protokoll als auch dem Iterator-Protokoll.
Generator ist eine Unterklasse der Iterator-Klasse.
Konstruktor
Es gibt keine JavaScript-Entität, die dem Generator-Konstruktor entspricht. Instanzen von Generator müssen von Generator-Funktionen zurückgegeben werden:
function* generator() {
yield 1;
yield 2;
yield 3;
}
const gen = generator(); // "Generator { }"
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3
Es gibt nur ein verstecktes Objekt, das das Prototypobjekt ist, das von allen Objekten gemeinsam genutzt wird, die von Generator-Funktionen erstellt wurden. Dieses Objekt wird oft als Generator.prototype stilisiert, um es wie eine Klasse aussehen zu lassen, aber es sollte eher als GeneratorFunction.prototype.prototype bezeichnet werden, da GeneratorFunction eine tatsächliche JavaScript-Entität ist. Um die Prototypen-Kette von Generator-Instanzen zu verstehen, siehe GeneratorFunction.prototype.prototype.
Instanzeigenschaften
Diese Eigenschaften sind auf Generator.prototype definiert und werden von allen Generator-Instanzen geteilt.
Generator.prototype.constructor-
Die Konstruktorfunktion, die das Instanzobjekt erstellt hat. Für
Generator-Instanzen ist der AnfangswertGeneratorFunction.prototype.Hinweis:
Generator-Objekte speichern keinen Verweis auf die Generator-Funktion, die sie erstellt hat. Generator.prototype[Symbol.toStringTag]-
Der Anfangswert der
[Symbol.toStringTag]-Eigenschaft ist der String"Generator". Diese Eigenschaft wird inObject.prototype.toString()verwendet.
Instanzmethoden
Erbt auch Instanzmethoden von seinem übergeordneten Iterator.
Generator.prototype.next()-
Gibt einen Wert zurück, der durch den
yield-Ausdruck erzeugt wurde. Generator.prototype.return()-
Wirkt, als ob eine
return-Anweisung im Körper des Generators an der aktuellen angehaltenen Position eingefügt wird, wodurch der Generator beendet wird und der Generator alle Aufräumarbeiten durchführen kann, wie sie mit einemtry...finally-Block kombiniert sind. Generator.prototype.throw()-
Wirkt, als ob eine
throw-Anweisung im Körper des Generators an der aktuellen angehaltenen Position eingefügt wird, wodurch der Generator über eine Fehlerbedingung informiert wird und es ermöglicht wird, den Fehler zu behandeln oder Aufräumarbeiten durchzuführen und sich zu schließen.
Beispiele
>Ein unendlicher Iterator
Mit einer Generator-Funktion werden Werte nicht ausgewertet, bis sie benötigt werden. Daher ermöglicht ein Generator die Definition einer potenziell unendlichen Datenstruktur.
function* infinite() {
let index = 0;
while (true) {
yield index++;
}
}
const generator = infinite(); // "Generator { }"
console.log(generator.next().value); // 0
console.log(generator.next().value); // 1
console.log(generator.next().value); // 2
// …
Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-generator-objects> |