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 Generatorfunktion zurückgegeben und entspricht sowohl dem iterierbaren Protokoll als auch dem Iterator-Protokoll.
Generator
ist eine Unterklasse der verborgenen Iterator
-Klasse.
Probieren Sie es aus
const foo = function* () {
yield "a";
yield "b";
yield "c";
};
let str = "";
for (const val of foo()) {
str = str + val;
}
console.log(str);
// Expected output: "abc"
Konstruktor
Es gibt keine JavaScript-Entität, die dem Generator
-Konstruktor entspricht. Instanzen von Generator
müssen von Generatorfunktionen 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 Prototypobjekt ist, das von allen Objekten geteilt wird, die durch Generatorfunktionen erstellt wurden. Dieses Objekt wird oft als Generator.prototype
stilisiert, damit es wie eine Klasse aussieht, sollte jedoch passender GeneratorFunction.prototype.prototype
genannt werden, da GeneratorFunction
eine tatsächliche JavaScript-Entität ist. Um die Prototypenkette von Generator
-Instanzen zu verstehen, siehe GeneratorFunction.prototype.prototype
.
Eigenschaften von Instanzen
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 Generatorfunktion, 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.
Methoden von Instanzen
Erbt auch Instanzmethoden von seinem übergeordneten Iterator
.
Generator.prototype.next()
-
Gibt einen Wert zurück, der durch den
yield
-Ausdruck bereitgestellt wird. Generator.prototype.return()
-
Wirkt, als ob eine
return
-Anweisung an der aktuellen angehaltenen Position im Körper des Generators eingefügt wird, was den Generator beendet und es ihm ermöglicht, jegliche Aufräumarbeiten auszuführen, wenn er in Kombination mit einemtry...finally
-Block verwendet wird. Generator.prototype.throw()
-
Wirkt, als ob eine
throw
-Anweisung an der aktuellen angehaltenen Position im Körper des Generators eingefügt wird, was den Generator über einen Fehlerzustand informiert und es ihm ermöglicht, den Fehler zu behandeln, Aufräumarbeiten auszuführen und sich selbst zu schließen.
Beispiele
Ein unendlicher Iterator
Mit einer Generatorfunktion werden Werte erst ausgewertet, wenn 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® 2025 Language Specification # sec-generator-objects |
Browser-Kompatibilität
Report problems with this compatibility data on GitHubLegend
Tip: you can click/tap on a cell for more information.
- Full support
- Full support