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 versteckten 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 Prototyp-Objekt ist, das von allen durch Generator-Funktionen erstellten Objekten geteilt wird. Dieses Objekt wird oft als Generator.prototype
stilisiert, um es wie eine Klasse aussehen zu lassen, aber es sollte angemessenerweise 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
.
Instanz-Eigenschaften
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.
Instanz-Methoden
Erbt auch Instanz-Methoden von seinem übergeordneten Iterator
.
Generator.prototype.next()
-
Gibt einen Wert zurück, der durch den
yield
Ausdruck ausgegeben wurde. Generator.prototype.return()
-
Wirkt, als ob eine
return
Anweisung in den Körper des Generators an der aktuellen angehaltenen Position eingefügt wird, was den Generator beendet und es dem Generator ermöglicht, Aufräumarbeiten auszuführen, wenn kombiniert mit einemtry...finally
Block. Generator.prototype.throw()
-
Wirkt, als ob eine
throw
Anweisung in den Körper des Generators an der aktuellen angehaltenen Position eingefügt wird, was dem Generator eine Fehlersituation mitteilt und es ihm ermöglicht, den Fehler zu handhaben oder aufzuräumen und sich selbst zu schließen.
Beispiele
Ein unendlicher Iterator
Mit einer Generator-Funktion werden Werte erst ausgewertet, wenn sie benötigt werden. Daher ermöglicht ein Generator uns, 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® 2026 Language Specification # sec-generator-objects |