js设计模式--迭代器模式
迭代器模式:
迭代器模式提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该方法中的内部表示。js中我们经常会封装一个each函数用来实现迭代器。
理解的意思:提供一个方法,去把对象的每一项按照一定的方法,访问各个元素。
上代码:
var agg = ((function(){
var index = 0,
arr = [1,2,3,4,5,6],
length = arr.length;
return {
next:function(){ //向下进行
var ele;
if(!this.hasNext) return null; //当索引值大于集合的length时判断停止
ele = arr[index]; //获取的元素
index = index +2; //索引
return ele; //返回查找到的元素
},
hasNext:function(){ //判断是否已经找完了
return index<length;
},
rewind:function(){ //把指针归零重置
index=0;
},
current:function(){ //返回指定的数值
return arr[index]
}
}
})())
执行:
while (agg.hasNext()) {
console.log(agg.next()); // 1,3,5
}
当然,你也可以通过额外的方法来重置数据,然后再继续其它操作:
// 重置
agg.rewind();
console.log(agg.current()); //
在jQuery这种也有这样的形式,比如each,
$.each([1, 2, 3, 4], function (index, value) {
console.log(index + ': ' + value);
});
写了个例子,操作数组:
function each(arr,callBack){
for(var i=0;i<arr.length;i++){
if(callBack.call(arr[i],i,arr[i]) === false){
return false;
}
}
};
var as = [1,2,3,4,5];
each(as,function(index,item){
console.log(index);//0,1,2,3,4
});
写了个例子,操作对象:
function each(arr,callBack){
for(var i in arr ){
if(callBack.call(arr[i],i,arr[i]) === false){
return false;
}
}
}
var as = {a:1,b:2,c:3,d:4};
each(as,function(index,item){
console.log(index);a,b,c,d
});
迭代器的使用场景是:对于集合内部结果常常变化各异,我们不想暴露其内部结构的话,但又响让客户代码透明底访问其中的元素,这种情况下我们可以使用迭代器模式。
参考:《javascript设计模式》
汤姆大叔:http://www.cnblogs.com/TomXu/archive/2012/03/09/2358903.html
js设计模式--迭代器模式的更多相关文章
- 19. 星际争霸之php设计模式--迭代器模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- java设计模式——迭代器模式
一. 定义与类型 定义:提供一种方法,顺序访问一个集合对象中的各个元素,而又不暴露该对象的内部表示 类型:行为型. 二. 使用场景 (1) 访问一个集合对象的内容而无需暴露它的内部表示 (2) 为遍 ...
- [Head First设计模式]生活中学设计模式——迭代器模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- JAVA 设计模式 迭代器模式
用途 迭代器模式 (Iterator) 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. 迭代器模式是一种行为型模式. 结构
- 深入浅出设计模式——迭代器模式(Iterator Pattern)
模式动机 一个聚合对象,如一个列表(List)或者一个集合(Set),应该提供一种方法来让别人可以访问它的元素,而又不需要暴露它的内部结构.针对不同的需要,可能还要以不同的方式遍历整个聚合对象,但是我 ...
- JavaScript设计模式 - 迭代器模式
迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示. 迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺 ...
- javascript设计模式-迭代器模式(Iterator)
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 设计模式 --迭代器模式(Iterator)
能够游走于聚合内的每一个元素,同时还可以提供多种不同的遍历方式. 基本概念: 就是提供一种方法顺序访问一个聚合对象中的各个元素,而不是暴露其内部的表示. 使用迭代器模式的优点: 遍历集合或者数 ...
- javascript设计模式——迭代器模式
前面的话 迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示.迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也 ...
随机推荐
- 【python之路11】集合数据类型(set)
集合数据类型(set):集合是不重复的无需序列 1.集合数据类型的创建 a = {11,22,33} #或 a = set() #创建空集合,不能用a={},这样创建的是字典类型 2.集合转换(将可迭 ...
- 阿里CEO张勇:阿里蚂蚁20亿元扶持开发者
https://bbs.taobao.com/catalog/thread/508895-318032179.htm?spm=a21bo.7724922.8439-0.2.tkjSOl 阿里CEO张勇 ...
- javascript中的元素包含判断
在实际开发中,很多时候需要知道某个节点是不是另一个节点的后代.很多浏览器提供了contains方法,如: console.log(document.documentElement.contains(d ...
- 环信 之 iOS 客户端集成一:导入库
1. 导入 我采用cocoapod的方式,在project同级目录下创建Podfile,Podfile内容如下: platform :ios, '7.0' pod 'EaseMobSDKFull', ...
- Centos下关于ssh、scp与rsync设置与应用
最近应公司要求,需要对文件数据进行远程传输与备份操作,特此写了一篇文章记录下了关于ssh.scp以及rsync的应用配置全过程,可能过程太过罗嗦,但主要就是想在不遗漏每个过程的情况下对此进行阐述,希望 ...
- iOS 错误 之 http请求
Application Transport Security has blocked a cleartext HTTP (http://) resource load since it is ins ...
- PHP简单分页类
<?php /* * ********************************************* * @类名: page * @参数: $myde_total - 总记录数 * ...
- C++第一天学习
代码1 #include<iostream> int main(){ int a; std::cout << "hello c++" << st ...
- iostat中 %util高 应用延迟高
经过长时间监控,发现iostat 中的%util居高不下,一直在98%上下,说明带宽占用率极高,遇到了瓶颈. 且读写速度很慢,经过排查,发现是HBA卡出现问题,更换后,用dd if命令测试,磁盘的读写 ...
- Raphael的set使用
Raphael的set使用 $(function() { initRaphael(); }); function initRaphael(e) { var paper = Raphael(0, 0, ...