Конструктор GeneratorFunction створює новий об'єкт функції-генератора. У JavaScript кожна функція-генератор насправді є об'єктом GeneratorFunction.
Зауважте, що GeneratorFunction не є глобальним об'єктом. Його можна отримати, виконавши наступний код.
Object.getPrototypeOf(function*(){}).constructor
Синтаксис
new GeneratorFunction ([arg1[, arg2[, ...argN]],] functionBody)
Параметри
arg1, arg2, ... argN- Імена, що використовуватиме функція в якості імен формальних аргументів. Кожне повинне бути рядком, що є коректним ідентифікатором JavaScript або списком таких рядків, розділених комою; наприклад, "
x", "theValue" або "a,b". functionBody- Рядок, що містить інструкції JavaScript, які складають визначення функції.
Опис
Об'єкти функцій-генераторів, створені конструктором GeneratorFunction, розбираються, коли створюється функція. Це менш ефективно, ніж оголошення функції-генератора виразом function* та її виклик у вашому коді, тому що такі функції розбираються з рештою коду.
Усі аргументи, передані у функцію, вважаються іменами ідентифікаторів параметрів функції, яка має бути створена, у порядку, в якому вони були передані.
Заувага: функції-генератори, створені конструктором GeneratorFunction, не створюють замикань зі своїм контекстом виконання; вони завжди створюються у глобальній області видимості. Під час виконання вони мають доступ лише до власних локальних змінних та до глобальних, але не до змінних області видимості, в якій був викликаний конструктор GeneratorFunction. Це відрізняється від використання eval з кодом для виразу функції-генератора.
Виклик конструктора GeneratorFunction як функції (без оператора new) має такий самий ефект, як і виклик його як конструктора.
Властивості
GeneratorFunction.length- Властивість довжини конструктора
GeneratorFunction, чиє значення дорівнює 1. GeneratorFunction.prototype- Дозволяє додавати властивості до усіх об'єктів функцій-генераторів.
Прототип GeneratorFunction
Властивості
GeneratorFunction.constructor- Початковим значенням є
GeneratorFunction. GeneratorFunction.prototype.prototype- Значення дорівнює
%GeneratorPrototype%.
Екземпляри GeneratorFunction
Екземпляри GeneratorFunction успадковують методи та властивості від 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
Специфікації
| Специфікація | Статус | Коментар |
|---|---|---|
| ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'GeneratorFunction' in that specification. |
Standard | Початкове визначення. |
| ECMAScript (ECMA-262) The definition of 'GeneratorFunction' in that specification. |
Living Standard |
Сумісність з веб-переглядачами
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
GeneratorFunction | Chrome Full support 39 | Edge Full support 13 | Firefox Full support 26 | IE No support No | Opera Full support 26 | Safari Full support 10 | WebView Android Full support 39 | Chrome Android Full support 39 | Firefox Android Full support 26 | Opera Android Full support 26 | Safari iOS Full support 10 | Samsung Internet Android Full support 4.0 | nodejs Full support Yes |
Legend
- Full support
- Full support
- No support
- No support