--- title: Generator slug: Web/JavaScript/Reference/Global_Objects/Generator tags: - ECMAScript 2015 - Generator - JavaScript - Legacy Generator - Legacy Iterator - NeedsTranslation - Reference - TopicStub translation_of: Web/JavaScript/Reference/Global_Objects/Generator ---
{{JSRef}}

Генератор - это объект, возвращаемый {{jsxref("Statements/function*", "функцией-генератором", "", 1)}} и соответствующий как "Итерируемому" протоколу, так и протоколу "Итератор".

Конструктор

Этот объект не может быть инстанциирован напрямую. Вместо этого, экемпляр Generator может быть возвращён из функции-генератора:

function* generator() {
  yield 1;
  yield 2;
  yield 3;
}

const gen = generator(); // "Generator { }"

console.log(gen.next().value); // 1
console.log(generator().next().value); // 1
console.log(generator().next().value); // 1

Методы экземпляра

{{jsxref("Generator.prototype.next()")}}
Возвращает значение, полученное выражением {{jsxref("Operators/yield", "yield")}}.
{{jsxref("Generator.prototype.return()")}}
Возвращает заданное значение и заканчивает генератор.
{{jsxref("Generator.prototype.throw()")}}
Выдает ошибку генератора.

Пример

Бесконечный Итератор

function* idMaker() {
    var index = 0;
    while(true)
        yield index++;
}

var gen = idMaker(); // "Generator { }"

console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
// ...

Спецификации

Specification Status Comment
{{SpecName('ES2015', '#sec-generator-objects', 'Generator objects')}} {{Spec2('ES2015')}} Initial definition.
{{SpecName('ESDraft', '#sec-generator-objects', 'Generator objects')}} {{Spec2('ESDraft')}}

Совместимость

{{Compat("javascript.builtins.Generator")}}

See also

Legacy generators

ES2015 generators