Javascript生成器函数使用函数工厂

时间:2018-03-15 01:36:38

标签: javascript

我想我已经掌握了发电机功能,不知道我是否真的会使用它们,但我发现道格拉斯·克罗克福德所说的东西特别有趣。在这段视频(https://www.youtube.com/watch?v=DxnYQRuLX7Q)26:00,他说可以使用工厂类型模式和普通函数复制生成器。我无法详细说明可能的“方式”。任何证明看起来很酷的程序。

2 个答案:

答案 0 :(得分:0)

  

生成器可以使用工厂类型模式和普通函数进行复制。

是。生成器函数只是一个在调用时返回生成器的函数。生成器只是具有nextthrowreturn方法的对象。你可以在没有特殊语法的情况下创建这样的东西。

Here是一个例子,there还有一些(通知生成器是迭代器的一个特例,所以通常你会看到只有next实现的迭代器,但是相同的模式可以扩展到生成器方法)。

答案 1 :(得分:0)

克罗福德说:

❌Generator是ES6的一个重大错误,带有一些怪异的魔术和怪异的外观?

(0, 0, 3), (1, 0, 2), (2, 0, 1), (3, 0, 0), 
(0, 1, 2), (1, 1, 1), (2, 1, 0),
(0, 2, 1), (1, 2, 0), 
(0, 3, 0).

✅这就是我们应该通过使用高阶函数来实现的方式:

function* counter() {
  let index = 0;
  while (true) {
    index += 1;
    yield index;
  }
}

const gen = counter();

gen.next().value    // 1
gen.next().value    // 2
gen.next().value    // 3

?