javascript 命名空間

    如果頁面的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)};

}



可以直接去拍拍看他們的代碼.........

};
發佈了73 篇原創文章 · 獲贊 0 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章