深入理解迭代器协议与自定义可迭代对象
探索 JavaScript 迭代器协议和可迭代协议的底层机制,学习如何创建自己的可迭代数据结构。 · 难度:入门 · +10XP
深入理解迭代器协议与自定义可迭代对象
在 JavaScript 中,for...of 循环和扩展运算符依赖于迭代协议。本教程将带你从零实现一个符合迭代器协议的对象,并解释 Symbol.iterator 的工作原理。你将学会如何让自定义的数据结构(如链表或树)支持迭代,从而利用 for...of 遍历。我们还会讨论迭代器的惰性求值优势,以及如何与生成器配合构建复杂的迭代逻辑。
class Range {
constructor(start, end, step = 1) {
this.start = start;
this.end = end;
this.step = step;
}
[Symbol.iterator]() {
let current = this.start;
const end = this.end;
const step = this.step;
return {
next() {
if (current <= end) {
const value = current;
current += step;
return { value, done: false };
}
return { done: true };
}
};
}
}
for (const n of new Range(1, 10, 2)) {
console.log(n); // 1,3,5,7,9
}