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* expression を持ったジェネレーター関数を宣言してコード内で呼び出すよりも効率が良いです。というのも、そのような関数はコードの残り部分でパースされるからです。
関数に通されたすべての引数は、通された順番の通りに、生成される関数内の引数の識別子の名称として扱われます。
注意: GeneratorFunctionコンストラクターで生成されたgenerator function はその作成コンテキストにクロージャを作成しません。常にグローバルスコープで生成されます。実行すると、GeneratorFunctionコンストラクターが呼ばれているスコープの変数ではなく、ローカル変数とグローバル変数にアクセスできます。これはジェネレーター関数表現に対するコードでevalを使うのとは違います。
(new 演算子を用いずに) 関数としてGeneratorFunction コンストラクターを呼び出すことは、コンストラクターを呼び出すのと同じ効果を持っています。
プロパティ
GeneratorFunction.lengthGeneratorFunctionコンストラクターの長さプロパティ。値は1です。GeneratorFunction.prototype- すべてのジェネレーター関数オブジェクトにプロパティの追加を許します。
GeneratorFunction プロトタイプオブジェクト
プロパティ
GeneratorFunction.constructor- The initial value is
GeneratorFunction. GeneratorFunction.prototype.prototype- The value is
%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
仕様
| 仕様 | 状況 | コメント |
|---|---|---|
| Unknown GeneratorFunction の定義 |
標準 | 初期定義 |
| ECMAScript Latest Draft (ECMA-262) GeneratorFunction の定義 |
ドラフト |
ブラウザ実装状況
| デスクトップ | モバイル | サーバー | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
GeneratorFunction | Chrome 完全対応 39 | Edge 完全対応 13 | Firefox 完全対応 26 | IE 未対応 なし | Opera 完全対応 26 | Safari ? | WebView Android 完全対応 39 | Chrome Android 完全対応 39 | Firefox Android 完全対応 26 | Opera Android 完全対応 26 | Safari iOS ? | Samsung Internet Android 完全対応 4.0 | nodejs 完全対応 あり |
prototype | Chrome 完全対応 39 | Edge 完全対応 13 | Firefox 完全対応 26 | IE 未対応 なし | Opera 完全対応 26 | Safari ? | WebView Android 完全対応 39 | Chrome Android 完全対応 39 | Firefox Android 完全対応 26 | Opera Android 完全対応 26 | Safari iOS ? | Samsung Internet Android 完全対応 4.0 | nodejs 完全対応 あり |
凡例
- 完全対応
- 完全対応
- 未対応
- 未対応
- 実装状況不明
- 実装状況不明