构造函数
没有 JavaScript 实体与 Generator 构造函数对应。Generator 的实例必须由 生成器函数 返回。
function* generator() {
yield 1;
yield 2;
yield 3;
}
const gen = generator(); // "Generator { }"
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3
只有一个隐藏对象,它是所有由生成器函数创建的对象共享的原型对象。该对象通常被风格化为 Generator.prototype 以使其看起来像一个类,但更恰当地称呼它为 GeneratorFunction.prototype.prototype,因为 GeneratorFunction 是一个实际的 JavaScript 实体。要理解 Generator 实例的原型链,请参阅 GeneratorFunction.prototype.prototype。
实例属性
这些属性定义在 Generator.prototype 上,并被所有 Generator 实例共享。
Generator.prototype.constructor-
创建实例对象的构造函数。对于
Generator实例,初始值为GeneratorFunction.prototype。注意:
Generator对象不存储指向创建它们的生成器函数的引用。 Generator.prototype[Symbol.toStringTag]-
[Symbol.toStringTag]属性的初始值为字符串"Generator"。此属性用于Object.prototype.toString()。
实例方法
还从其父级 Iterator 继承实例方法。.
Generator.prototype.next()-
返回由
yield表达式产生的值。 Generator.prototype.return()-
作用相当于在生成器当前暂停的位置的体内部插入一个
return语句,这将结束生成器,并允许生成器在与try...finally块结合使用时执行任何清理任务。 Generator.prototype.throw()-
作用相当于在生成器当前暂停的位置的体内部插入一个
throw语句,它会通知生成器一个错误情况,并允许它处理该错误,或执行清理并关闭自身。
示例
一个无限迭代器
使用生成器函数,值直到需要时才会被求值。因此,生成器允许我们定义一个潜在的无限数据结构。
function* infinite() {
let index = 0;
while (true) {
yield index++;
}
}
const generator = infinite(); // "Generator { }"
console.log(generator.next().value); // 0
console.log(generator.next().value); // 1
console.log(generator.next().value); // 2
// …
规范
| 规范 |
|---|
| ECMAScript® 2026 语言规范 # sec-generator-objects |
浏览器兼容性
加载中…