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 function zurückgegeben und entspricht sowohl dem iterable protocol als auch dem iterator protocol.
Generator
ist eine Unterklasse der verborgenen Iterator
Klasse.
Probieren Sie es aus
Konstruktor
Es gibt keine JavaScript-Entität, die dem Generator
Konstruktor entspricht. Instanzen von Generator
müssen von generator functions 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 generator functions erstellt wurden. Dieses Objekt wird oft als Generator.prototype
stilisiert, um es wie eine Klasse aussehen zu lassen, aber es sollte passender GeneratorFunction.prototype.prototype
genannt werden, da GeneratorFunction
eine tatsächliche JavaScript-Entität ist. Um die Prototypkette 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 Konstruktionsfunktion, die das Instanzobjekt erstellt hat. Für
Generator
Instanzen ist der AnfangswertGeneratorFunction.prototype
.Note:
Generator
Objekte speichern keinen Verweis auf die generator function, 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 von dem
yield
Ausdruck geliefert wird. Generator.prototype.return()
-
Agiert so, als ob eine
return
-Anweisung an der aktuellen, ausgesetzten Position im Körper des Generators eingefügt wird, was den Generator beendet und es dem Generator ermöglicht, alle Aufräumarbeiten in Kombination mit einemtry...finally
Block durchzuführen. Generator.prototype.throw()
-
Agiert so, als ob eine
throw
-Anweisung an der aktuellen, ausgesetzten Position im Körper des Generators eingefügt wird, was den Generator über einen Fehlerzustand 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 function werden Werte erst ausgewertet, wenn sie benötigt werden. Daher ermöglicht ein Generator es 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 Language Specification # sec-generator-objects |
Browser-Kompatibilität
BCD tables only load in the browser