1、什么是迭代器
- 迭代器就是提供一个对象能够顺序访问一个封闭数据结构/聚合对象中的一系列数据,并且不暴露对象的内部表示。
2、数组中的迭代器为例
数组中用到的 for-of 这些都是基于迭代器 Array.prototype[Symbol.iterator]
当重写了这个函数for-of这种方法都不能用了
当然如果按下面的方式去重写Array.prototype[Symbol.iterator] 效果就和原来的一样。
// 重写数组iterator
Array.prototype[Symbol.iterator]=function(){
let i = 0;
let self = this
return {
next :function(){
let done = i>=self.length-1
let value = done?undefined:self[i++]
return {
done ,
value
}
}
}
}
3、怎么实现迭代器
- 必须要有next()方法。去遍历内部一些列的数据
- 一个状态done去判断是否还有下一个迭代
- 一个value获取当前迭代的值
实现方式
-
内部实现:
就是$.each、forEach 这些已经实现了在内部已经编辑好了
-
外部实现
实现一个外部迭代器,就是显示的请求迭代下一个元素
var Iterator = function( obj ){ var current = 0; var next = function(){ current += 1; }; var isDone = function(){ return current >= obj.length; }; var getCurrItem = function(){ return obj[ current ]; }; return { next: next, isDone: isDone, getCurrItem: getCurrItem } };