在学习 JavaScript 设计模式之前,我们先做一个 commonUtils 工具库,以便于后期的学习和使用。
commonUtils 工具库包括:多维数组遍历,继承函数,接口类及其验证。
本章为多维数组的遍历 代码如下:
/*
对于如下多维数组,该如何遍历呢?
其实方法很简单——递归;
对于存在 “无规律的层级关系” 的成员的遍历,也就是 “树状结构” 的成员的遍历,我们应该立刻想到递归
*/
var arr = [62,31,[45,[16,85]]];// 多维数组
// 为 Array 原型对象添加一个 each 遍历方法
Array.prototype.each = function(fn){
try{
// 判断遍历方法入口条件
// 当数组的长度大于0的时候 && 传递的参数必须为函数
if(this.length > 0 && typeof fn === 'function'){
// 判断 this.i 成员是否存在,如果不存在,则创建this.i 作为数组下标
this.i || (this.i = 0);
// 开始循环遍历
while(this.i < this.length){
// 获得数组的元素
var item = this[this.i];
// 判断当前元素是否为数组
if(item && item.constructor === Array){
// 如果当前元素为数组,则进行递归操作
item.each(fn);
}else{
// 如果当前元素不是数组(那就是一个非数组的最终元素),则将该元素作为参数传递给fn函数
fn.call(item,item);// 第一个参数写啥都行,因为 fn函数 不需要绑定任何作用域
}
this.i ++; // 每遍历一个元素,数组下标加1
}
this.i = null;// 释放内存 垃圾回收机制回收变量
}
}catch(e){
throw new Error('something is error...');
}
return this;
};
var arr = [62,31,[45,[16,85]]];// 多维数组
arr.each(function(item){
alert(item);
});
// 结果:62 31 45 16 85