乐趣区

关于es6:ES6-Iterator遍历器

数据汇合【Array,Object,Map,Set】的对立遍历数据结构机制

Iterator 遍历过程

  1. 创建对象指针,指向起始地位
  2. 第一次调用 next,拜访第一个对象
  3. 一直调用 next 办法,直至终止
  4. {value: undefined, done: true}
var it = makeIterator(['a', 'b']);

function makeIterator(array) {
  var index = 0;
  return {next: function() {
      return index < array.length ? {value: array[index++],
        done: false
      }: {
        value: void 0,
        done: true
      }
    }
  }
}

object 自身不能被遍历,
ES6 规定实现 Symbol.iterator 能够反对遍历

var obj = {
  name: "ranck",
  massgage: "hahah",
  level: "t3"
}

for(let value of obj) {console.log(value)  // Uncaught TypeError: obj is not iterable
}

obj[Symbol.iterator] = function () {  // 这样不报错,然而不失效
    return {next: function () {
        return {
          value: 1,
          done: false
        };
      }
    }
}


obj[Symbol.iterator]  = function () {const attrs = Object.getOwnPropertyNames(this)
  let index = 0
  return {next: () => {
      return index < attrs.length ? {value: this[attrs[index++]],
        done: false
      }: {
        value: void 0,
        done: true
      }
    }
  }
}
退出移动版