为什么要有iterator
作用
for…of 循环的遍历过程的本质
const arr = [1,2]
function makeIterator(array){
let nextIndex = 0;
return {
next:function(){
return nextIndex < array.length ? {
value:array[nextIndex++],
done:false
} :{
value:undefined,
done:true
}
}
}
}
let res = makeIterator(arr)
console.log(res.next());
console.log(res.next());
console.log(res.next());
console.log(res.next());
Iterator接口部署在数据结构的Symbol.iterator属性
let arr1 = [1,2,3,4,5]
原生具备Iterator接口的数据结构
具有iterator接口 Array Map Set String
对象不具备Iterator接口 可以手动部署迭代器接口 让其可以用for…of 循环遍历
let obj = {
data:[1,2,3,4],
[Symbol.iterator](){
let index = 0
let that = this
return {
next(){
if(index<that.data.length){
return {
value:that.data[index++],
done:false
}
}else{
return {
value:undefined,
done:true
}
}
}
}
}
}
for (let i of obj ){
console.log(i);
}
转载请注明原文地址:https://ipadbbs.8miu.com/read-52176.html