--- title: GeneratorFunction slug: Web/JavaScript/Reference/Global_Objects/GeneratorFunction tags: - ECMAScript 2015 - GeneratorFunction - JavaScript - Ітератор - Конструктор translation_of: Web/JavaScript/Reference/Global_Objects/GeneratorFunction ---
{{JSRef}}

Конструктор GeneratorFunction створює новий об'єкт {{jsxref("Statements/function*", "функції-генератора")}}. У JavaScript кожна функція-генератор насправді є об'єктом GeneratorFunction.

Зауважте, що GeneratorFunction не є глобальним об'єктом. Його можна отримати, виконавши наступний код.

Object.getPrototypeOf(function*(){}).constructor

Синтаксис

new GeneratorFunction ([arg1[, arg2[, ...argN]],] functionBody)

Параметри

arg1, arg2, ... argN
Імена, що використовуватиме функція в якості імен формальних аргументів. Кожне повинне бути рядком, що є коректним ідентифікатором JavaScript або списком таких рядків, розділених комою; наприклад, "x", "theValue" або "a,b".
functionBody
Рядок, що містить інструкції JavaScript, які складають визначення функції.

Опис

Об'єкти {{jsxref("Statements/function*", "функцій-генераторів")}}, створені конструктором GeneratorFunction, розбираються, коли створюється функція. Це менш ефективно, ніж оголошення функції-генератора {{jsxref("Statements/function*", "виразом function*")}} та її виклик у вашому коді, тому що такі функції розбираються з рештою коду.

Усі аргументи, передані у функцію, вважаються іменами ідентифікаторів параметрів функції, яка має бути створена, у порядку, в якому вони були передані.

Заувага: {{jsxref("Statements/function*", "функції-генератори")}}, створені конструктором GeneratorFunction, не створюють замикань зі своїм контекстом виконання; вони завжди створюються у глобальній області видимості. Під час виконання вони мають доступ лише до власних локальних змінних та до глобальних, але не до змінних області видимості, в якій був викликаний конструктор GeneratorFunction. Це відрізняється від використання {{jsxref("Global_Objects/eval", "eval")}} з кодом для виразу функції-генератора.

Виклик конструктора GeneratorFunction як функції (без оператора new) має такий самий ефект, як і виклик його як конструктора.

Властивості

GeneratorFunction.length
Властивість довжини конструктора GeneratorFunction, чиє значення дорівнює 1.
{{jsxref("GeneratorFunction.prototype")}}
Дозволяє додавати властивості до усіх об'єктів функцій-генераторів.

Прототип GeneratorFunction

Властивості

{{page('/uk/docs/Web/JavaScript/Reference/Global_Objects/GeneratorFunction/prototype', 'Властивості')}}

Екземпляри GeneratorFunction

Екземпляри GeneratorFunction успадковують методи та властивості від {{jsxref("GeneratorFunction.prototype")}}. Як в усіх конструкторах, ви можете змінити прототип конструктора, щоб внести зміни до усіх екземплярів GeneratorFunction.

Приклади

Створення функції-генератора від конструктора GeneratorFunction

var GeneratorFunction = Object.getPrototypeOf(function*(){}).constructor
var g = new GeneratorFunction('a', 'yield a * 2');
var iterator = g(10);
console.log(iterator.next().value); // 20

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

Специфікація Статус Коментар
{{SpecName('ES2015', '#sec-generatorfunction-objects', 'GeneratorFunction')}} {{Spec2('ES2015')}} Початкове визначення.
{{SpecName('ESDraft', '#sec-generatorfunction-objects', 'GeneratorFunction')}} {{Spec2('ESDraft')}}

Сумісність з веб-переглядачами

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

Див. також