一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

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() 是合法语法,但那是异步生成器,需配合 awaitfor await...of

常见用途场景

生成器方法适合需要按需产出数据、避免一次性构造大数组、或实现懒求值逻辑的场景:

  • 遍历树形结构(如 DOM 节点、嵌套对象)
  • 分页请求的数据流(每次 yield 一页结果)
  • 状态机或有限步骤流程(每步 yield 当前状态)
  • 模拟无限序列(如斐波那契、自然数列)

热门栏目