iterables 和 iterators

iterable protocol 和 iterator protocol

interface Iterable {
    [Symbol.iterator]() : Iterator;
}
interface Iterator {
    next() : IteratorResult;
}
interface IteratorResult {
    value: any;
    done: boolean;
}

iterable(可迭代对象)是有 Symbol.iterator 方法的对象。下面对象都是 iterable

iterable

var elems = document.querySelectorAll('a')
typeof elems[Symbol.iterator] // "function"
// 转为数组
[...elems]
Array.from(elems)

iterator 遍历序列。iterator 的 next 方法没有参数,返回一个对象,包含两个属性

怎么让自定义对象实现 iterable protocol? 自己实现或者用生成器