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 iterierbaren Protokoll als auch dem Iterator-Protokoll.
Generator
ist eine Unterklasse der verborgenen 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 verborgenes Objekt, das das Prototyp-Objekt ist, das von allen Objekten, die durch Generator-Funktionen erstellt wurden, gemeinsam genutzt wird. Dieses Objekt wird oft als Generator.prototype
stilisiert, um es wie eine Klasse aussehen zu lassen, sollte jedoch passenderweise GeneratorFunction.prototype.prototype
genannt werden, da GeneratorFunction
eine tatsächliche JavaScript-Entität ist. Um die Prototyp-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. Bei
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()
-
Verhält sich so, als ob eine
return
-Anweisung an der aktuellen angehaltenen Position in den Körper des Generators eingefügt wird, was den Generator beendet und ihm ermöglicht, Aufräumarbeiten durchzuführen, wenn er mit einemtry...finally
-Block kombiniert wird. Generator.prototype.throw()
-
Verhält sich so, als ob eine
throw
-Anweisung an der aktuellen angehaltenen Position in den Körper des Generators eingefügt wird, was den Generator über eine Fehlersituation informiert und ihm ermöglicht, den Fehler zu behandeln oder Aufräumarbeiten durchzuführen und sich zu schließen.
Beispiele
Ein unendlicher Iterator
Mit einer Generator-Funktion werden Werte erst ausgewertet, wenn sie benötigt werden. Daher erlaubt uns ein Generator, eine potenziell unendliche Datenstruktur zu definieren.
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® 2025 Language Specification # sec-generator-objects |