之前看到網易還是新浪還是什麼什麼網站來著也是用類似這種東西的當時對js只是九牛一毛的水平當場被嚇傻了
但這次我打算親自分析下以後在看到就不會迷茫了
復制代碼 代碼如下:
//調用例子
bradio
namespace("bradio
lang
array");
//下面是百度編譯後的源碼
變量都是a
b
c
d
之後我會重新寫一個規范點的
//好了
開始分析
bradio
namespace = function () { //創建命名空間
var a = arguments
//["bradio
lang
array"]
b = null
//用於存放上一級對象
c
d
e
f; //c是計數器
d是內層循環的計數器
e是拆分後命名空間數組
f是arguments參數長度
c =
;
for (f = a
length; c < f; c++) {
e = ("" + a[c])
split("
"); //拆分命名空間
拆分後 ["bradio"
"lang"
"array"]
b = bradio; //基礎對象
基於這個對象進行命名空間的添加
for (d = "bradio" == e[
] ?
:
; d < e
length; d++) //如果第一個是bradio
就第二個開始遍歷 ["bradio"
"lang"
"array"]
b[e[d]] = b[e[d]] || {}
b = b[e[d]]
//其實相當於
//b[e[d]] = b[e[d]] || {} //如果當前對象已經操作就用當前對象
不存在就賦值空對象
//b = b[e[d]] //用字對象覆蓋b
接下去的循環基於子對象添加命名空間
}
return b//返回最後一層對象
};
下面是整理後的能看懂的版本
復制代碼 代碼如下:
//bradio
namespace("bradio
lang
array");
bradio
namespace = function () { //創建命名空間
var args = arguments
parent = null
arr
i
j
len;
for (i=
len = args
length; i < len; i++) {
arr = ("" + args[i])
split("
");
parent = bradio;
for(j = "bradio" == arr[
] ?
:
; j < arr
length; j++) {
parent[ arr[j] ] = parent[ arr[j] ] || {};
parent = parent[ arr[j] ];
}
}
return parent;
}
當然只是我的理解如果哪裡不是很對還請各位大俠幫忙指出以免誤導了大家
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20447.html