GeneratorFunction

Конструктор 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 Latest Draft (ECMA-262)
The definition of 'GeneratorFunction' in that specification.
Draft

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

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
GeneratorFunctionChrome Full support 39Edge Full support 13Firefox Full support 26IE No support NoOpera Full support 26Safari Full support 10WebView Android Full support 39Chrome Android Full support 39Firefox Android Full support 26Opera Android Full support 26Safari iOS Full support 10Samsung Internet Android Full support 4.0nodejs Full support Yes
prototypeChrome Full support 39Edge Full support 13Firefox Full support 26IE No support NoOpera Full support 26Safari Full support 10WebView Android Full support 39Chrome Android Full support 39Firefox Android Full support 26Opera Android Full support 26Safari iOS Full support 10Samsung Internet Android Full support 4.0nodejs Full support Yes

Legend

Full support  
Full support
No support  
No support

Див. також