TypeError: Конструктор Iterator/AsyncIterator нельзя использовать напрямую
Исключение JavaScript "Конструктор Iterator нельзя использовать напрямую" или "Конструктор AsyncIterator нельзя использовать напрямую" возникает, когда вы пытаетесь использовать конструкторы Iterator() или AsyncIterator напрямую для создания экземпляров. Эти конструкторы являются абстрактными классами и должны использоваться только для наследования.
Сообщение
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)
Тип ошибки
Что пошло не так?
Конструкторы Iterator и AsyncIterator являются абстрактными классами и не должны использоваться напрямую. Они проверяют значение new.target и вызывают ошибку, если оно совпадает с самим конструктором. Единственный способ использовать эти конструкторы — наследовать от них в подклассе и вызывать super() в конструкторе подкласса. Подкласс также должен определить метод next(), чтобы быть полезным.
Примеры
Неправильные случаи
new Iterator();
Правильные случаи
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 { done: true };
}
return { value: this.#step++, done: false };
}
}
new MyIterator();
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Constructor_cant_be_used_directly