当我实现接口数组时,有一些方法返回一个IterableIterator。IterableIterator从我能很好理解的Iterator扩展而来,对我来说很有意义
interface IterableIterator<T> extends Iterator<T> {
[Symbol.iterator](): IterableIterator<T>;
}
但是我应该为Symbol.iterator实现什么呢?这也会返回一个IterableIterator(递归?(我不理解IterableIterator的概念。如果能有人回应就太好了。或者可以给我一个描述这件事的来源。
Iterator
对象本身变成Iterable
通常很有用,这样它们就可以:
- 用于
for..of
循环 - 排列成一个阵列
- 展开到参数列表中
- 在接受可迭代项的API中使用,如
Array.from
new Set
new Map
如果Iterator
对象不是Iterable
,则它们不能以上述方式使用。迭代它的唯一方法是重复调用.next()
方法。这很不方便。因此,ECMAScript API生成的大多数Iterator
对象也是Iterable
。
要制作Iterator
Iterable
,[Symbol.iterator]
方法应为return this
。
有关更多信息,请参阅:
MDN上的"迭代协议"