【发布时间】:2018-10-06 07:27:04
【问题描述】:
我们可以让一个普通的 (POJSO) JS 对象可迭代,像这样:
const tempObj = {a: 1, b: 2, c: 3};
tempObj[Symbol.iterator] = function () {
const self = this;
const keys = Object.keys(self);
return {
next() {
const k = keys.shift();
return {
done: !k,
value: [k, self[k]]
}
}
}
};
现在我们可以使用for..of循环:
for (let [k,v] of tempObj) {
console.log(k,v);
}
我们得到:
a 1
b 2
c 3
我的问题是 - 除了 next() 之外,我们还需要实现另一种方法吗?如果不是,为什么迭代器规范选择返回一个对象而不是只返回一个函数?为什么规范不简单:
tempObj[Symbol.iterator] = function () {
return function next {
return {
done: Object.keys(this).length === 0,
value: Object.keys(this).shift()
}
}
};
我唯一的猜测是,通过返回一个对象,它为更新/更改留出了空间。
【问题讨论】:
-
我最近实现了一个functional iterator 没有隐式突变。
标签: javascript node.js ecmascript-6 iterator