如果頁面的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)}; } 可以直接去拍拍看他們的代碼......... };