在ES6中,实现一个可迭代对象(Iterable)需要遵循一定的步骤。主要涉及到在你的对象上定义一个[Symbol.iterator]()
方法,该方法返回一个迭代器(Iterator)。迭代器是一个具有next()
方法的对象,该方法返回一个对象,该对象包含value
和done
两个属性。
文末有我帮助400多位同学成功领取到前端offer的场景题哦
以下是一个简单的示例,展示了如何定义一个可迭代对象:
class MyIterable {
constructor(items) {
this.items = items;
this.index = 0;
}
// 实现 [Symbol.iterator]() 方法
[Symbol.iterator]() {
// 返回一个迭代器对象
const iterator = {
next: () => {
// 如果还有元素可以迭代
if (this.index < this.items.length) {
// 返回一个对象,包含 value 和 done 属性
return {
value: this.items[this.index++], // 返回当前元素的值,并递增索引
done: false // 表示还没有迭代完
};
}
// 如果没有元素可以迭代了
return {
value: undefined, // 或者可以是其他任何表示“没有值”的值
done: true // 表示已经迭代完
};
}
};
// 返回迭代器对象
return iterator;
}
}
// 使用示例
const iterable = new MyIterable(['a', 'b', 'c']);
for (const item of iterable) {
console.log(item); // 输出: a, b, c
}
在这个例子中,我们定义了一个名为MyIterable
的类。这个类有一个[Symbol.iterator]()
方法,它返回一个迭代器对象。这个迭代器对象有一个next()
方法,该方法在被调用时返回当前元素的值(如果存在)和一个表示是否还有更多元素可以迭代的done
属性。当我们使用for...of
循环遍历MyIterable
的实例时,循环会自动调用[Symbol.iterator]()
方法并迭代返回的迭代器对象。