--- 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, ... argN
x
", "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.length
GeneratorFunction
, чиє значення дорівнює 1.GeneratorFunction
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")}}