淺析JavaScript中命名空間namespace模式
namespace即“命名空間”,也稱“名稱空間” 、”名字空間”。JavaScript不像C#或Java,有專門的namespace和package語法支持,當(dāng)JS復(fù)雜到一定程度,尤其是引用大量的第三方JS框架和類庫之后,命名沖突就會成為一個嚴(yán)重的問題,因此使用JS自己的變通方式建立命名空間很重要。
命名空間有助于減少程序中所需要的全局變量的數(shù)量,并且同時有助于避免命名沖突或過長的名字前綴。
關(guān)于命名空間的例子:
/**
* 創(chuàng)建全局對象MYAPP
* @module MYAPP
* @title MYAPP Global
*/
var MYAPP = MYAPP || {};
/**
* 返回指定的命名空間,如果命名空間不存在則創(chuàng)建命名空間。
* 備注:命名時需小心,注意保留關(guān)鍵字,可能在一些瀏覽器無法使用。
*
* @method namespace
* @param {String *} 至少需要創(chuàng)建一個命名空間
* @return {Object} 最后一個命名空間創(chuàng)建的對象的引用
*/
MYAPP.namespace = function(str){
var parts = str.split("."),
parent = MYAPP,
i=0,
l=0;
if(parts[0]==="MYAPP"){
parts = parts.slice(1);
}
for(i=0,l=parts.length; i<l;i++){
if(typeof parent[parts[i]] === "undefined"){
parent[parts[i]] = {};
}
parent = parent[parts[i]];
}
return parent;
}
/**
* bfun是Basic Functions Extended的縮寫
* 作用:包括數(shù)組、字符串等等數(shù)功能擴(kuò)展
*
* @module bfun
*/
MYAPP.bfun = {
array:(function(){
return {
/**
* @method isArray 判斷是否為數(shù)組
* @param {Array} 數(shù)組
* @return {Boolean} 真返回true,否則返回false
*/
isArray: function(){
return Object.prototype.toString.call(arguments[0]) === '[object Array]';
},
/**
* @method inArray 檢查值是否在數(shù)組中
* @param {value,Array} 值,數(shù)組
* @return {Boolean} 真返回true,否則返回undefined
*/
inArray: function(val,arr){
for(var i=0,l=arr.length;i<l;i++){
if(arr[i] === val){
return true;
}
}
}
}
})(),
string:(function(){
return {
/**
* @method trim 過濾字符串兩邊多余的空格
* @param {String} 字符串
* @return {String} 字符串
*/
trim: function(){
return arguments[0].replace(/(^\s*)|(\s*$)/g, "");
},
/**
* @method ltrim 過濾字符串左邊多余的空格
* @param {String} 字符串
* @return {String} 字符串
*/
ltrim: function(){
return arguments[0].replace(/^s+/g, "");
},
/**
* @method rtrim 過濾字符串右邊多余的空格
* @param {String} 字符串
* @return {String} 字符串
*/
rtrim: function(){
return arguments[0].replace(/s+$/g, "");
}
}
})()
}
// 測試
MYAPP.test = {
init: function(){
// 使用對應(yīng)的模塊先引用
var marray = MYAPP.namespace("MYAPP.bfun.array");
var mstring = MYAPP.namespace("MYAPP.bfun.string");
var arr = ["a","b"];
var str = " abc ";
console.log("判斷是否為數(shù)組:" + marray.isArray(arr));
console.log("值是否在數(shù)組中:" + marray.inArray("a",arr));
console.log("過濾左右空格:" + mstring.trim(str));
}
}
MYAPP.test.init();
以上所述是小編給大家介紹的JavaScript中命名空間namespace模式的全部敘述,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
微信小程序?qū)崿F(xiàn)循環(huán)嵌套數(shù)據(jù)選擇
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)循環(huán)嵌套數(shù)據(jù)選擇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05
layui監(jiān)聽下拉選框選中值變化的方法(包含監(jiān)聽普通下拉選框)
今天小編大家分享一篇layui監(jiān)聽下拉選框選中值變化的方法(包含監(jiān)聽普通下拉選框),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09
關(guān)于JS數(shù)據(jù)類型檢測的多種方式總結(jié)
Javascript中檢查數(shù)據(jù)類型一直是老生常談的問題,類型判斷在web開發(fā)中也有著非常廣泛的應(yīng)用,所以下面這篇文章主要給大家介紹了關(guān)于JS數(shù)據(jù)類型檢測的那些事,需要的朋友可以參考下2021-09-09
JavaScript實現(xiàn)簡單的四則運算計算器完整實例
這篇文章主要介紹了JavaScript實現(xiàn)簡單的四則運算計算器,結(jié)合完整實例形式分析了javascript基于表單相應(yīng)實現(xiàn)加減乘除數(shù)學(xué)運算的操作技巧,需要的朋友可以參考下2017-04-04
使用ajax的post同步執(zhí)行(實現(xiàn)方法)
下面小編就為大家分享一篇使用ajax的post同步執(zhí)行(實現(xiàn)方法),具有很好的參考價值,希望對大家有所幫助2017-12-12
JavaScript中document.forms[0]與getElementByName區(qū)別
在很多情況下JavaScript中document.forms[0]與getElementByName這兩種用法沒有區(qū)別,這片文章詳細(xì)的解釋了兩者的區(qū)別和用法,有興趣的朋友可以參考一下。2015-01-01

