学习学习JavaScript设计模式之迭代器模式设计模式之迭代器模式
主要为大家介绍了JavaScript设计模式中的迭代器模式,对JavaScript设计模式感兴趣的小伙伴们可以参考一下
迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。
JavaScript中的Array.prototype.forEach
一、一、jQuery中的迭代器中的迭代器
$.each([1, 2, 3], function(i, n) {
console.log("当前下标为:"+ i + " 当前元素为:"+ n );
});
二、实现自己的迭代器二、实现自己的迭代器
var each = function(ary, callback) {
for(var i = 0, l = ary.length; i < l; i++) {
callback.call(ary[i], i, ary[i]);
}
};
each([1, 2, 3], function(i, n) {
console.log("当前下标为:"+ i + " 当前元素为:"+ n );
});
注意:区别于Array.prototype.forEach的参数!!!
[1, 2, 3].forEach(function(n, i, curAry){
console.log("当前下标为:"+ i + " 当前元素为:"+ n + " 当前数组为:" + curAry);
})
三、内部迭代器、外部迭代器三、内部迭代器、外部迭代器
((1)内部迭代器:)内部迭代器:已经定义好了迭代规则,它完全接手整个迭代过程,外部只需一次初始调用。上述自定义each即为内部迭
代器!
((2)外部迭代器:)外部迭代器:必须显示地请求迭代下一个元素。
示例:判断两个数组是否相等
示例一:内部迭代器
// 内部迭代器
var each = function(ary, callback) {
for(var i = 0, l = ary.length; i < l; i++) {
callback.call(ary[i], i, ary[i]);
}
};
// 比较函数
var compareAry = function(ary1, ary2) {
if(ary1.length != ary2.length) {
throw new Error("不相等"); // return console.log("不相等");
}
// 且住
each(ary1, function(i, n) {
if(n !== ary2[i]) {
// return console.log("不相等");
// return 只能返回到each方法外,后续console.log("相等")会继续执行,所以这里得使用throw
throw new Error("不相等");
}
});
console.log("相等");
}
compareAry([1, 2, 3], [1, 2, 4]);
示例二:外部迭代器
// 外部迭代器
var Iterator = function(obj) {
var current = 0,
next = function() {
current++;
},
isDone = function() {
评论0
最新资源