最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
JavaScript 中 class 语法里如何定义生成器方法
时间:2026-07-09 11:15:52 编辑:袖梨 来源:一聚教程网
JavaScript class 中生成器方法需用标识,返回Generator对象,支持yield暂停恢复;分实例(method)和静态(static *method)两种,this指向调用者,不可用箭头函数,常用于懒加载、分页、状态机等场景。
在 JavaScript 的 class 语法中,定义生成器方法只需在方法名前加上 *(星号),且该方法会返回一个 Generator 对象,支持 yield 暂停与恢复执行。
基本写法:用 * 标识生成器方法
生成器方法不是普通函数,它必须以 * 开头,可以是实例方法,也可以是静态方法:
- 实例生成器方法:直接定义在 class 内部,通过实例调用
- 静态生成器方法:用
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 的行为
生成器方法中的 this 指向调用它的实例(或类),和普通方法一致。但要注意:生成器函数本身不立即执行,只在首次调用 next() 或进入 for...of 时才开始运行。
立即学习“Java免费学习笔记(深入)”;
- 不能在生成器方法内使用箭头函数替代
function*—— 箭头函数不支持yield -
yield只能在生成器函数内部使用,否则报错 - 生成器方法不能是异步的(如
async *method()是合法语法,但那是异步生成器,需配合await和for await...of)
常见用途场景
生成器方法适合需要按需产出数据、避免一次性构造大数组、或实现懒求值逻辑的场景:
- 遍历树形结构(如 DOM 节点、嵌套对象)
- 分页请求的数据流(每次 yield 一页结果)
- 状态机或有限步骤流程(每步 yield 当前状态)
- 模拟无限序列(如斐波那契、自然数列)
相关文章
- 蚂蚁庄园今日答案(每日更新)2026年1月16日 07-17
- 蚂蚁庄园今日正确答案1月16日 07-17
- 死亡搁浅2全部34个武器的解锁方法条件是什么 07-17
- 星塔旅人全部角色特殊回忆触发条件方式合集 07-17
- Palia帕利亚1.12至1.18村民需求物品清单大全 07-17
- 舒舒服服小岛时光全部魔法种子分布详情图 07-17