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:

js
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 Anfangswert GeneratorFunction.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 in Object.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 einem try...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.

js
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 GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
Generator
next
return
throw

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Siehe auch