迭代器的原理:
- 调用Symbol.iterator接口,返回一个指针对象,这个指针对象指向数组起始位置
- 第一次调用next,指针指向数组的第一个元素
- 调用对象中的next函数,指针后移,指向下一个元素,直到指向最后一个元素
- 每次调用next会返回一个包含value和done属性的对象,done用来表示遍历的状态是否结束
Symbol.iterator其实就是迭代器接口,调用Symbol.iterator接口,就会返回一个新的指针,指向数组的初始位置,使用这个指针来实现数组数据的遍历
使用迭代器遍历一个对象(for of遍历)
const classroom={
name:'计算机2班',
students:[
'xiaoming',
'xiaohong',
'xiaozhang',
'xiaowu',
'rongrong'
],
[Symbol.iterator]:function(){
let index=0
const _this=this
return{
next:function(){
if(index<_this.students.length){
const result={
value:_this.students[index],done:false
}
index++
return result
}
else{
return {value:undefined,done:true}
}
}
}
}
}
for( e of classroom){
console.log(e)
}
//迭代器的原理,调用Symbol.iterator接口,返回一个新的指针,指向数组的初始位置
//调用指针中的next方法,指向数组的第一个元素
//依次调用next方法,指针一直往后遍历,直到遍历完所有元素
//嗲用一次next就会返回一个包含value和done属性的对象
遍历成功