之前看到网易还是新浪还是什么什么网站来着也是用类似这种东西的当时对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;
}
当然只是我的理解如果哪里不是很对还请各位大侠帮忙指出以免误导了大家