如果页面的js内容比较少的 时候,确实命名空间的意义是没有的 但是 当 有很多的 .js的 外部连接的 时候
命名空间的 作用还是 可以体现出来的 如某2个人共同写 一个 项目 都有一个叫 bind的函数 但是参数却不一样
这时,当2个项目合到 一起的 时候肯定会出问题的... 这里命名空间的 好处就显示出来了...
一个例子
var YAHOO = window.YAHOO || {};
YAHOO.namespace = function(ns) {
if (!ns || !ns.length) {return null;};
var levels = ns.split(".");
var nsobj = YAHOO;
//如果申请的命名空间是在YAHOO下的,则必须忽略它,否则就成了YAHOO.YAHOO了
for (var i=(levels[0] == "YAHOO") ? 1 : 0; i<levels.length; ++i) {
//如果当前命名空间下不存在,则新建一个关联数组。
nsobj[levels[i]] = nsobj[levels[i]] || {};
nsobj = nsobj[levels[i]];
}
//返回所申请命名空间的一个引用;
return nsobj;
};
//可以这么 用
var wt = YAHOO.namespace("wt");
wt.bind =function(){alert('a')};
下面一个是拍拍的写法(也就是我最后次面试的)
function $namespace(str){ var arr=str.split(','); for(var i=0;i<arr.length;i++){ // 将命名空间切成N部分, 比如mini、common等 arr[i]=arr[i].split("."); str= ""; var strEval= ""; for (var j = 0; j < arr[i].length; j++){ if (j!= 0){str += "."}; str += arr[i][j]; // 依次创建构造命名空间对象(假如不存在的话)的语句 // 比如先创建mini,然后创建mini.common依次下去 strEval += "if (typeof(" + str + ") == 'undefined'){" + str + " = {}};"; }; if(strEval != ""){eval(strEval)}; } 可以直接去拍拍看他们的代码......... };