--- title: GeneratorFunction slug: Web/JavaScript/Reference/Global_Objects/GeneratorFunction tags: - Constructor - ECMAScript 2015 - GeneratorFunction - Iterator - JavaScript - Reference 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, ... argNx”,“theValue”或“a,b”。functionBody当创建函数时,将使用GeneratorFunction构造函数创建的{{jsxref("Statements/function*", "生成器函数")}}对象进行解析。这比使用{{jsxref("Statements/function*", "function* 表达式")}} 声明生成器函数效率更低,并且在代码中调用它,因为这些函数与其余的代码一起被解析。
传递给函数的所有参数按照它们被传递的顺序被视为要创建的函数中参数的标识符的名称。
提示:使用GeneratorFunction构造函数创建的{{jsxref("Statements/function*", "生成器函数")}}不会为其创建上下文创建闭包;它们始终在全局范围内创建。当运行它们时,它们只能访问自己的本地变量和全局变量,而不是从GeneratorFunction构造函数调用的范围的变量。这与使用{{jsxref("Global_Objects/eval", "eval")}}与生成函数表达式的代码不同。
将GeneratorFunction构造函数调用为函数(不使用new运算符)与将其作为构造函数调用的效果相同。
GeneratorFunction.lengthGeneratorFunction构造函数的 length 属性值为 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
| Specification | Status | Comment |
|---|---|---|
| {{SpecName('ES2015', '#sec-generatorfunction-objects', 'GeneratorFunction')}} | {{Spec2('ES2015')}} | Initial definition. |
| {{SpecName('ESDraft', '#sec-generatorfunction-objects', 'GeneratorFunction')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.builtins.GeneratorFunction")}}