TypeError: Iterator/AsyncIterator-Konstruktor kann nicht direkt verwendet werden
Der JavaScript-Fehler "Iterator-Konstruktor kann nicht direkt verwendet werden" oder "AsyncIterator-Konstruktor kann nicht direkt verwendet werden" tritt auf, wenn Sie versuchen, die Iterator()
- oder AsyncIterator()
-Konstruktoren direkt zu verwenden, um Instanzen zu erstellen. Diese Konstruktoren sind abstrakte Klassen und sollten nur vererbt werden.
Nachricht
TypeError: Abstract class Iterator not directly constructable (V8-based) TypeError: Iterator constructor can't be used directly (Firefox) TypeError: Iterator cannot be constructed directly (Safari) TypeError: Abstract class AsyncIterator not directly constructable (V8-based) TypeError: AsyncIterator constructor can't be used directly (Firefox) TypeError: AsyncIterator cannot be constructed directly (Safari)
Fehlertyp
Was ist schiefgelaufen?
Die Iterator
- und AsyncIterator
-Konstruktoren sind abstrakte Klassen und sollten nicht direkt verwendet werden. Sie überprüfen den Wert von new.target
und werfen einen Fehler, wenn dieser mit dem Konstruktor selbst übereinstimmt. Der einzige Weg, diese Konstruktoren zu verwenden, besteht darin, von ihnen in einer Unterklasse zu erben und super()
im Konstruktor der Unterklasse aufzurufen. Die Unterklasse muss außerdem eine next()
-Methode definieren, um nützlich zu sein.
Beispiele
Ungültige Fälle
new Iterator();
Gültige Fälle
class MyIterator extends Iterator {
#step;
#end;
constructor(start, end) {
// Implicitly calls new Iterator(), but with a different `new.target`
super();
this.#step = start;
this.#end = end;
}
next() {
if (this.#step < this.#end) {
return { value: this.#step++, done: false };
} else {
return { done: true };
}
}
}
new MyIterator();