--- title: GeneratorFunction slug: Web/JavaScript/Reference/Global_Objects/GeneratorFunction tags: - ECMAScript 2015 - GeneratorFunction - JavaScript - Ітератор - Конструктор translation_of: Web/JavaScript/Reference/Global_Objects/GeneratorFunction ---
Конструктор GeneratorFunction створює новий об'єкт {{jsxref("Statements/function*", "функції-генератора")}}. У JavaScript кожна функція-генератор насправді є об'єктом GeneratorFunction.
Зауважте, що GeneratorFunction не є глобальним об'єктом. Його можна отримати, виконавши наступний код.
Object.getPrototypeOf(function*(){}).constructor
new GeneratorFunction ([arg1[, arg2[, ...argN]],] functionBody)
arg1, arg2, ... argNx", "theValue" або "a,b".functionBodyОб'єкти {{jsxref("Statements/function*", "функцій-генераторів")}}, створені конструктором GeneratorFunction, розбираються, коли створюється функція. Це менш ефективно, ніж оголошення функції-генератора {{jsxref("Statements/function*", "виразом function*")}} та її виклик у вашому коді, тому що такі функції розбираються з рештою коду.
Усі аргументи, передані у функцію, вважаються іменами ідентифікаторів параметрів функції, яка має бути створена, у порядку, в якому вони були передані.
Заувага: {{jsxref("Statements/function*", "функції-генератори")}}, створені конструктором GeneratorFunction, не створюють замикань зі своїм контекстом виконання; вони завжди створюються у глобальній області видимості. Під час виконання вони мають доступ лише до власних локальних змінних та до глобальних, але не до змінних області видимості, в якій був викликаний конструктор GeneratorFunction. Це відрізняється від використання {{jsxref("Global_Objects/eval", "eval")}} з кодом для виразу функції-генератора.
Виклик конструктора GeneratorFunction як функції (без оператора new) має такий самий ефект, як і виклик його як конструктора.
GeneratorFunction.lengthGeneratorFunction, чиє значення дорівнює 1.GeneratorFunctionGeneratorFunctionЕкземпляри GeneratorFunction успадковують методи та властивості від {{jsxref("GeneratorFunction.prototype")}}. Як в усіх конструкторах, ви можете змінити прототип конструктора, щоб внести зміни до усіх екземплярів GeneratorFunction.
GeneratorFunctionvar 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")}}