首页 > 其他 > 详细

迭代器Iterator

时间:2019-02-21 18:04:04      阅读:184      评论:0      收藏:0      [点我收藏+]

遍历器(Iterator)设计目的:

一是为各种数据结构,提供一个统一的、简便的访问接口

二是使得数据结构的成员能够按某种次序排列

三是 ES6 创造了一种新的遍历命令for...of循环,Iterator 接口主要供for...of消费

实例
Map下的Symbol(Symbol.iterator)属性
技术分享图片

迭代协议(规范)

[Symbol.iterator]: function() {
    return {
      next: function() {
        return value
      }
    }
  }

实例 默认的对象没有实现iterator接口,我们定义一个,使得for of 可以直接作用在对象上

const obj = {
  name: "cj",
  age: 24,
  [Symbol.iterator]: function() {
    let nextIndex = 0
    // 获取当前对象的可枚举属性
    let keys = Object.keys(this)
    // 保留this
    let that = this
    return {
      next: function (){
        return nextIndex < keys.length
          ? { value: that[keys[nextIndex++]], done: false }
          : { value: undefined, done: true }
      }
    }
  }
}

for (let e of obj) {
  console.log(e)
}

技术分享图片

用到迭代器的场合

for of

... spread运算符 涉及到数组

对数组和Set结构赋值

其他涉及到数组参数的,比如Array.form Promise.all() Promise.race

默认实现Iterator接口对象

String
Array
Map
Set
TypedArray
函数的 arguments 对象
NodeList 对象

迭代器Iterator

原文:https://www.cnblogs.com/sefaultment/p/10414199.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!