javascript 命名空間以提高代碼重用性
更新時(shí)間:2008年11月13日 00:13:45 作者:
為你封裝的javascript庫(kù)加上命名空間以提高代碼重用性
當(dāng)在同一個(gè)網(wǎng)頁(yè)里引入10多個(gè)js文件之后,
各js中的同名函數(shù)就很容易沖突了。
比如xxx庫(kù)里寫(xiě)了個(gè)addCssStyle方法,
yyy類(lèi)庫(kù)里也寫(xiě)了個(gè)addCssStyle方法,
而這兩個(gè)方法的具體實(shí)現(xiàn)又有一定差別。
那么同時(shí)引用這兩個(gè)組件的時(shí)候,函數(shù)沖突之后導(dǎo)致頁(yè)面效果發(fā)生變化,
調(diào)試和修改都是非常痛苦的,如果為了避免沖突,
而放棄引用一些優(yōu)秀的組件,那更是讓人郁悶的事情。
為此,在封裝javascript組件庫(kù)的時(shí)候,請(qǐng)使用命名空間來(lái)避免沖突。
將所有的方法和變量都要按包名類(lèi)名的方式來(lái)寫(xiě)。
(這個(gè)時(shí)候?qū)懘a的感覺(jué)和封裝java的util方法一樣方便,呵呵)
由此,我的js庫(kù)按如下方式封裝。
google了半天,都沒(méi)現(xiàn)成的,于是自己摸索出來(lái),示例代碼如下:
(lizongbo原創(chuàng)!??!)
<script language="JavaScript" type="text/javascript" >
<!-- //初始化命名空間
var jscom = jscom ? jscom : {};
jscom.lizongbo = jscom.lizongbo ? jscom.lizongbo : {};
//第一種封裝方法
jscom.lizongbo.util = jscom.lizongbo.util ? jscom.lizongbo.util : {
crtVersion : 'jscom.lizongbo.util version 0.0.1', //注意用逗號(hào)隔開(kāi)
sayHello: function (str){
window.alert('hello : '+str +' by ' + this.getVersion()); //變量引用要加上this
},//注意用逗號(hào)隔開(kāi)
getVersion :function (){
//alert(' jscom.lizongbo.util version ' + this.crtVersion);//變量引用要加上this
return this.crtVersion+' lizongbo';
}//注意不能夠有逗號(hào)
}
//第二種封裝方法
jscom.lizongbo.util2 =function (){};//重點(diǎn)是這行,它保證了下面的with調(diào)用
jscom.lizongbo.util2.crtVersion=' jscom.lizongbo.util2 version 0.0.2';
jscom.lizongbo.util2.sayHello = function(str){
with (jscom.lizongbo.util2) {//這里也是重點(diǎn),不然會(huì)找不到getVersion方法。
window.alert('你好 : '+str +' by ' + getVersion());//這種方法不用加this
}
};
jscom.lizongbo.util2.getVersion = function(){
with (jscom.lizongbo.util2) {//這里也是重點(diǎn),不然會(huì)找不到crtVersion變量。
return crtVersion+' lizongbo2';
}
};
var vutil1= jscom.lizongbo.util; //和java的import差不多好用
vutil1.sayHello('lizongbo'); //第一種調(diào)用
var vutil2= jscom.lizongbo.util2;
vutil2.sayHello('lizongbo');//第二種調(diào)用
//-->
</script>
把上面的代碼復(fù)制網(wǎng)頁(yè)里看看效果吧。
對(duì)比兩種實(shí)現(xiàn)方式,現(xiàn)有代碼按第二種方式改造最為方便。
再把js文件按命名空間命名,那樣操作就更加方便了。
例如
<script type="text/javascript" src="/commons/scripts/jscom.lizongbo.util1.js"></script>
<script type="text/javascript" src="/commons/scripts/jscom.lizongbo.util2.js"></script>
只要都按此方式編寫(xiě)的庫(kù),再也不用擔(dān)心引入多個(gè)js文件之后的函數(shù)沖突問(wèn)題了。
各js中的同名函數(shù)就很容易沖突了。
比如xxx庫(kù)里寫(xiě)了個(gè)addCssStyle方法,
yyy類(lèi)庫(kù)里也寫(xiě)了個(gè)addCssStyle方法,
而這兩個(gè)方法的具體實(shí)現(xiàn)又有一定差別。
那么同時(shí)引用這兩個(gè)組件的時(shí)候,函數(shù)沖突之后導(dǎo)致頁(yè)面效果發(fā)生變化,
調(diào)試和修改都是非常痛苦的,如果為了避免沖突,
而放棄引用一些優(yōu)秀的組件,那更是讓人郁悶的事情。
為此,在封裝javascript組件庫(kù)的時(shí)候,請(qǐng)使用命名空間來(lái)避免沖突。
將所有的方法和變量都要按包名類(lèi)名的方式來(lái)寫(xiě)。
(這個(gè)時(shí)候?qū)懘a的感覺(jué)和封裝java的util方法一樣方便,呵呵)
由此,我的js庫(kù)按如下方式封裝。
google了半天,都沒(méi)現(xiàn)成的,于是自己摸索出來(lái),示例代碼如下:
(lizongbo原創(chuàng)!??!)
<script language="JavaScript" type="text/javascript" >
<!-- //初始化命名空間
var jscom = jscom ? jscom : {};
jscom.lizongbo = jscom.lizongbo ? jscom.lizongbo : {};
//第一種封裝方法
jscom.lizongbo.util = jscom.lizongbo.util ? jscom.lizongbo.util : {
crtVersion : 'jscom.lizongbo.util version 0.0.1', //注意用逗號(hào)隔開(kāi)
sayHello: function (str){
window.alert('hello : '+str +' by ' + this.getVersion()); //變量引用要加上this
},//注意用逗號(hào)隔開(kāi)
getVersion :function (){
//alert(' jscom.lizongbo.util version ' + this.crtVersion);//變量引用要加上this
return this.crtVersion+' lizongbo';
}//注意不能夠有逗號(hào)
}
//第二種封裝方法
jscom.lizongbo.util2 =function (){};//重點(diǎn)是這行,它保證了下面的with調(diào)用
jscom.lizongbo.util2.crtVersion=' jscom.lizongbo.util2 version 0.0.2';
jscom.lizongbo.util2.sayHello = function(str){
with (jscom.lizongbo.util2) {//這里也是重點(diǎn),不然會(huì)找不到getVersion方法。
window.alert('你好 : '+str +' by ' + getVersion());//這種方法不用加this
}
};
jscom.lizongbo.util2.getVersion = function(){
with (jscom.lizongbo.util2) {//這里也是重點(diǎn),不然會(huì)找不到crtVersion變量。
return crtVersion+' lizongbo2';
}
};
var vutil1= jscom.lizongbo.util; //和java的import差不多好用
vutil1.sayHello('lizongbo'); //第一種調(diào)用
var vutil2= jscom.lizongbo.util2;
vutil2.sayHello('lizongbo');//第二種調(diào)用
//-->
</script>
把上面的代碼復(fù)制網(wǎng)頁(yè)里看看效果吧。
對(duì)比兩種實(shí)現(xiàn)方式,現(xiàn)有代碼按第二種方式改造最為方便。
再把js文件按命名空間命名,那樣操作就更加方便了。
例如
<script type="text/javascript" src="/commons/scripts/jscom.lizongbo.util1.js"></script>
<script type="text/javascript" src="/commons/scripts/jscom.lizongbo.util2.js"></script>
只要都按此方式編寫(xiě)的庫(kù),再也不用擔(dān)心引入多個(gè)js文件之后的函數(shù)沖突問(wèn)題了。
您可能感興趣的文章:
相關(guān)文章
原生js實(shí)現(xiàn)彈窗消息動(dòng)畫(huà)
這篇文章主要為大家詳細(xì)介紹了原生js實(shí)現(xiàn)彈窗消息動(dòng)畫(huà),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11layer.open 按鈕的點(diǎn)擊事件關(guān)閉方法
今天小編就為大家分享一篇layer.open 按鈕的點(diǎn)擊事件關(guān)閉方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08JavaScript實(shí)現(xiàn)生成隨機(jī)密碼的示例詳解
使用JavaScript我們可以輕松地在客戶(hù)端生成隨機(jī)密碼,本文我們將實(shí)現(xiàn)一個(gè)簡(jiǎn)單的隨機(jī)密碼生成器,能夠生成指定長(zhǎng)度和包含特定字符集的密碼,有需要的可以參考下2024-01-01JavaScript 箭頭函數(shù)的特點(diǎn)、與普通函數(shù)的區(qū)別
這篇文章主要介紹了JavaScript 箭頭函數(shù)的特點(diǎn)、與普通函數(shù)的區(qū)別,很多情況下,箭頭函數(shù)和函數(shù)表達(dá)式創(chuàng)建的函數(shù)并無(wú)區(qū)別,只有寫(xiě)法上的不同,本文第二塊內(nèi)容將介紹箭頭函數(shù)和普通函數(shù)功能上的區(qū)別,感興趣的朋友跟隨小編一起看看吧2021-11-11Three.js利用性能插件stats實(shí)現(xiàn)性能監(jiān)聽(tīng)的方法
Three.js 是一款運(yùn)行在瀏覽器中的 3D 引擎,你可以用它創(chuàng)建各種三維場(chǎng)景,而下面這篇文章主要給大家介紹了關(guān)于Three.js如何利用性能插件stats實(shí)現(xiàn)性能監(jiān)聽(tīng)的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09JS獲取當(dāng)前網(wǎng)頁(yè)大小以及屏幕分辨率等
這篇文章主要介紹了JS獲取當(dāng)前網(wǎng)頁(yè)大小以及屏幕分辨率等,方法雖簡(jiǎn)單,但比較實(shí)用,需要的朋友可以參考下2014-09-09淺析JS給原始數(shù)據(jù)類(lèi)型加屬性和方法為什么不報(bào)錯(cuò)
這篇文章主要想和大家一起探討一下JavaScript中給原始數(shù)據(jù)類(lèi)型添加屬性和方法為什么不報(bào)錯(cuò),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2023-11-11