当需要对一个对象进行迭代时(比如开始用于一个for..of循环中),它的@@iterator方法都会在不传参情况下被调用,返回的迭代器用于获取要迭代的值。
自定义迭代器
let arr [];
arr[Synbol,iterator] = fuction(){
let i = 0;
let self = this;
return {
next() {
return { done: self.length - 1 < i, value: self[i++] };
}
};
}
for (let v of arr) {
console.log(v);
}
当执行 for(var i of arr) 的时候,其实是调用了 arr[Symbol.iterator]() 方法,这个方法返回了一个iterator(迭代器)。迭代器有一个next方法,for循环会不断调用这个 arr.next方法来获取下一个值,直到返回值中的 done 属性为true的时候结束循环。
评论 (0)