在學習 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