【发布时间】:2019-01-04 00:30:45
【问题描述】:
var array = [1, 2, 3, 4, 6, 6, 6, 6, 6];
array[Symbol.iterator] = (function() {
var current = 0;
console.log('executed')
var iterator = {
next: function() {
var iteratorObject = {
done: "undefined",
value: false
};
//returns the next item in the sequence
if (current != this.length) {
iteratorObject.done = this[current];
current++;
//return false
return iteratorObject;
} else if (current === this.length) {
//finished
//return true
iteratorObject.done = "undefined";
iteratorObject.value = true;
return iteratorObject;
} else {
console.log('something broke!')
}
}
}
return iterator;
})();
在上面的代码中,我正在为我创建的数组对象编写一个自定义迭代器。但是,它一直使用内置的 Symbol.iterator 作为数组,为什么会这样呢?
您可以告诉它运行内置迭代器而不是我制作的自定义迭代器?
【问题讨论】:
-
你是如何尝试“使用”这个迭代器的
-
尝试在第一行结束后删除此
2号码。 -
@Azhy ya idk 为什么会在那里,但没有区别
-
也许问题在于您正在使用
for...in并认为它正在使用您的代码 - 它没有。for...in语句迭代对象的所有非符号、可枚举属性。 其中for...of语句创建循环迭代可迭代对象 - 这就是原因我在 20 分钟前问如何你使用这个 - 你似乎忽略了 -
最后,
array[Symbol.iterator]需要是一个函数,但是因为})();,你已经把它变成了一个对象
标签: javascript arrays iterator