iterator 迭代器

iterator 迭代器
  • 概念:iterator是一种接口机制,为各种不同的数据结构提供统一的访问机制

  • 作用:

    • 为各种数据结构提供一个统一的访问机制
    • 使得数据结构的成员能够按某种次序排列
    • ES6创造的新的遍历for...of和三点运算符就是用的Iterator接口
  • 工作原理

    • 创建一个指针对象(遍历器对象),指向数据结构的起始位置
    • 第一次调用next()方法,指针自动指向数据结构的第一个成员
    • 每次调用next()方法返回的是一个包含valuedone的对象:{value:当前成员的值,done:布尔值}
    • 接着不断的调用next()方法,指针会一直往后移动,直到指向最后一个成员
  • 原生具备iterator接口的数据结构(可用for..of遍历)

    • Array arguments set容器 map容器 String
  • function iteratorUtil() {
           let index = 0  //取下标用
           let that = this  //for..of 中的调用者
           if (that instanceof Array) {
               return {  //1.iterator创建一个指针对象,指向数据结构的起始位置
                   next() { //2.第一次调用next()方法
                       return index < that.length ?
                       	//3.返回一个对象{value:当前的成员,done:布尔值}
                           { value: that[index++], done: false } :
                           { value: that[index++], done: true }
                   }	//4.然后不断的调用next(),指针往后移动,直到指针指向最后一个成员
               }
           }
           else {
               let keys = Object.keys(that) //获取由对象的键构成的数组
               let length = keys.length
               return {
                   next() {
                       return index < length ?
                           { value: that[keys[index++]], done: false } :
                           { value: that[keys[index++]], done: true }
                   }
               }
           }
     
       }
       //给Array原型对象添加自己封装的iteratorUtil方法,同样可以for..of遍历数组
       Array.prototype[Symbol.iterator] = iteratorUtil 
       let arr = [3, 8, 4, 6, 9]
       for (let i of arr) {
           console.log(i); //依次打印 3 8 4 6 9
       }
       let result = iteratorUtil(arr)
       console.log(result.next());
     
       let obj = {
           name: 'pink',
           age: 20
       }
       //给Object原型对象添加自己封装的iteratorUtil方法,让本不能够使用for..of对象也能使用       for..of遍历对象
       Object.prototype[Symbol.iterator] = iteratorUtil
     
       for (let i of obj) {
           console.log(i); //依次打印 pink 20
       }
     
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值