JavaScript class 中生成器方法需用标识,返回Generator对象,支持yield暂停恢复;分实例(method)和静态(static *method)两种,this指向调用者,不可用箭头函数,常用于懒加载、分页、状态机等场景。
在 JavaScript 的 class 语法中,定义生成器方法只需在方法名前加上 *(星号),且该方法会返回一个 Generator 对象,支持 yield 暂停与恢复执行。
生成器方法不是普通函数,它必须以 * 开头,可以是实例方法,也可以是静态方法:
static * 声明,通过类名调用示例:
class Counter { constructor(start = 0) { this.current = start; }<p>// 实例生成器方法*countUp(times) {for (let i = 0; i < times; i++) {yield this.current++;}}</p><p>// 静态生成器方法static *range(from, to) {for (let i = from; i < to; i++) {yield i;}}}</p><p>// 使用实例生成器const c = new Counter(10);for (const val of c.countUp(3)) {console.log(val); // 10, 11, 12}</p><p>// 使用静态生成器for (const n of Counter.range(0, 3)) {console.log(n); // 0, 1, 2}
生成器方法中的 this 指向调用它的实例(或类),和普通方法一致。但要注意:生成器函数本身不立即执行,只在首次调用 next() 或进入 for...of 时才开始运行。
立即学习“Java免费学习笔记(深入)”;
function* —— 箭头函数不支持 yield
yield 只能在生成器函数内部使用,否则报错async *method() 是合法语法,但那是异步生成器,需配合 await 和 for await...of)生成器方法适合需要按需产出数据、避免一次性构造大数组、或实现懒求值逻辑的场景: