提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。
大概就是,为有顺序的集合,进行遍历迭代。
包括但不限于 Array, String, Map, arguments, NodeList。
es6对迭代器实现 Iterator Array.prototype[Symbol.iterator] 只要有 [Symbol.iterator] 就代表这个数据可以迭代
class Iterator {
constructor(box) {
this.box = box
this.index = 0
}
next() {
const list = this.box.list
const flag = this.hasNext()
if(flag) {
return {value: list[this.index++], flag}
} else {
return {value: undefined, flag}
}
}
hasNext() {
const lg = this.box.list.length
if(this.index >= lg) return false
else return true
}
}
class Box {
constructor(list) {
this.list = list
}
getIterator() {
return new Iterator(this)
}
}
function each(data) {
if(Array.isArray(data)){
const box = new Box(data)
const iterator = box.getIterator()
let item = {flag: true}
while(item.flag) {
item = iterator.next()
if(item.flag) console.log(item.value)
}
}
}
each([1, 2, 3, 4, 5])