迭代器Iterator

51 阅读1分钟

自定义迭代器

 class  Counter{
  constructor(limit){
    this.limit = limit
  }
  [Symbol.iterator](){
    let count=1,
    limit = this.limit
    return {
      next(){
          if(count<=limit){
            return { done:false,value:count++ }
          }else{
            return { done:true,value:undefined }
          }
      }
    }
  }
 }

 const counter = new Counter(5)

 for(const value of counter){
  console.log("value:",value)
 }

给对象添加迭代器

 Object.prototype[Symbol.iterator] = function(){
  let self = this, count =0
  let keys = Object.keys(self)
  return {
    next(){
      if(count<keys.length){
        let key = keys[count++]
        return {done:false,value:[key,self[key]]}
      }else{
        return { done:true,value:undefined} 
      }
    }
  }
 }

 let obj = {a:1,b:2,c:3,}
 for(const [key,value] of obj){
  console.log("Obj-key-Value:",key,value)
 }

for of循环能通过break,continue,return 或者throw 提前退出