`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`构造函数的 length 属性值为 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

## 规范

Specification | Status | Comment
--- | --- | ---
ECMAScript 2015 (6th Edition, ECMA-262) GeneratorFunction | Standard | Initial definition.
ECMAScript Latest Draft (ECMA-262) GeneratorFunction | Draft |

## 浏览器兼容

The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.

Update compatibility data on GitHub

| Desktop | Mobile | Server
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | Safari on iOS | Samsung Internet | Node.js
`GeneratorFunction` | Chrome Full support Yes | Edge Full support Yes | Firefox Full support 26 | IE No support No | Opera Full support Yes | Safari ? | WebView Android Full support Yes | Chrome Android Full support Yes | Edge Mobile ? | Firefox Android Full support 26 | Opera Android ? | Safari iOS ? | Samsung Internet Android Full support Yes | nodejs ?
`prototype` | Chrome Full support Yes | Edge Full support Yes | Firefox Full support 26 | IE No support No | Opera Full support Yes | Safari ? | WebView Android Full support Yes | Chrome Android Full support Yes | Edge Mobile ? | Firefox Android Full support 26 | Opera Android ? | Safari iOS ? | Samsung Internet Android Full support Yes | nodejs ?

### Legend

Full support
  Full support
No support
  No support
Compatibility unknown
  Compatibility unknown

## 相关链接

- `function* function`
- `function* expression`
- `Function`
- `function statement`
- `function expression`
- Functions and function scope