我想我已经掌握了发电机功能,不知道我是否真的会使用它们,但我发现道格拉斯·克罗克福德所说的东西特别有趣。在这段视频(https://www.youtube.com/watch?v=DxnYQRuLX7Q)26:00,他说可以使用工厂类型模式和普通函数复制生成器。我无法详细说明可能的“方式”。任何证明看起来很酷的程序。
答案 0 :(得分:0)
生成器可以使用工厂类型模式和普通函数进行复制。
是。生成器函数只是一个在调用时返回生成器的函数。生成器只是具有next
,throw
和return
方法的对象。你可以在没有特殊语法的情况下创建这样的东西。
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
?