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 erfüllt sowohl das iterable Protokoll als auch das 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:

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 verstecktes Objekt, das das Prototyp-Objekt ist, das von allen Objekten geteilt wird, die durch Generator-Funktionen erstellt werden. Dieses Objekt wird oft als Generator.prototype stilisiert, um es wie eine Klasse aussehen zu lassen, aber es sollte treffender 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 Konstruktionsfunktion, die das Instanzobjekt erstellt hat. Für Generator-Instanzen ist der Anfangswert GeneratorFunction.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 in Object.prototype.toString() verwendet.

Instanz-Methoden

Erbt auch Instanz-Methoden von seinem Elternteil Iterator.

Generator.prototype.next()

Gibt einen von dem yield-Ausdruck gelieferten Wert zurück.

Generator.prototype.return()

Wirkt, als ob eine return-Anweisung an der aktuellen angehaltenen Position im Körper des Generators eingefügt wird, wodurch der Generator beendet wird und es dem Generator ermöglicht wird, Aufräumarbeiten durchzuführen, wenn es mit einem try...finally-Block kombiniert 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 eine Fehlerbedingung informiert und ihm erlaubt, 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.

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® 2026 Language Specification
# sec-generator-objects

Browser-Kompatibilität

Siehe auch