JavaScript 編程引入命名空間的方法與代碼
更新時(shí)間:2007年08月13日 19:25:25 作者:
JavaScript 代碼一般最常見的語法格式就是定義函數(shù) function xxx(){/*code...*/},經(jīng)常有這樣的一大堆函數(shù)定義。函數(shù)名很容易發(fā)生沖突,特別是引入多個(gè)js文件時(shí),沖突的情況尤為明顯。因此也就有引入命名空間的必要。
Javascript 本身沒有命名空間的概念,需要用對象模擬出來。
比如定義一個(gè)命名空間的類,用于創(chuàng)建命名空間:
function NameSpace(){
}
這是一個(gè)構(gòu)造函數(shù),但卻不做任何事情,再來下面和評論有關(guān)的代碼:
var comment = new NameSpace();
comment.list = function(){/*code...*/};
comment.counter = 0;
第一行創(chuàng)建所謂命名空間(其實(shí)就是一個(gè)空白對象),名為comment,第二、三行定義該空間下的兩個(gè)方法。調(diào)用時(shí)可以使用 comment.list() 或者 comment.counter++ 等;
再創(chuàng)建子命名空間:
comment.add = new NameSpace();
comment.add.post = function(){/*code...*/}
comment.add.check = function(){}
之所以引入命名空間的概念,是為了避免函數(shù)名相同的問題。上面的過程也可以這樣定義:
var comment = {
list : function(){/*code...*/},
add : {
post : function(){/*code...*/},
check : function(){/*code...*/}
}
}
prototype.js 里面就大量使用這種方式,雖然這種方式更直觀地像一棵樹,但只要節(jié)點(diǎn)稍多一些,眼睛就忙于尋找這些節(jié)點(diǎn)的關(guān)系,命名空間的做法是橫向地描述這種關(guān)系樹,層次關(guān)系直接表現(xiàn)在字面上,兩種方式效果一致,但書寫風(fēng)格卻各有特點(diǎn)。
再擴(kuò)展一個(gè)方法:
NameSpace.prototype.appendChild = function(ns){
for (var key in ns){
this[key] = ns[key];
}
return this;
}
NameSpace.prototype.copyChild = NameSpace.prototype.appendChild;
Javascript 本身沒有命名空間的概念,需要用對象模擬出來。
比如定義一個(gè)命名空間的類,用于創(chuàng)建命名空間:
function NameSpace(){
}
這是一個(gè)構(gòu)造函數(shù),但卻不做任何事情,再來下面和評論有關(guān)的代碼:
var comment = new NameSpace();
comment.list = function(){/*code...*/};
comment.counter = 0;
第一行創(chuàng)建所謂命名空間(其實(shí)就是一個(gè)空白對象),名為comment,第二、三行定義該空間下的兩個(gè)方法。調(diào)用時(shí)可以使用 comment.list() 或者 comment.counter++ 等;
再創(chuàng)建子命名空間:
comment.add = new NameSpace();
comment.add.post = function(){/*code...*/}
comment.add.check = function(){}
之所以引入命名空間的概念,是為了避免函數(shù)名相同的問題。上面的過程也可以這樣定義:
var comment = {
list : function(){/*code...*/},
add : {
post : function(){/*code...*/},
check : function(){/*code...*/}
}
}
prototype.js 里面就大量使用這種方式,雖然這種方式更直觀地像一棵樹,但只要節(jié)點(diǎn)稍多一些,眼睛就忙于尋找這些節(jié)點(diǎn)的關(guān)系,命名空間的做法是橫向地描述這種關(guān)系樹,層次關(guān)系直接表現(xiàn)在字面上,兩種方式效果一致,但書寫風(fēng)格卻各有特點(diǎn)。
再擴(kuò)展一個(gè)方法:
NameSpace.prototype.appendChild = function(ns){
for (var key in ns){
this[key] = ns[key];
}
return this;
}
NameSpace.prototype.copyChild = NameSpace.prototype.appendChild;
相關(guān)文章
codemirror6實(shí)現(xiàn)自定義代碼提示效果實(shí)例
這篇文章主要給大家介紹了關(guān)于codemirror6實(shí)現(xiàn)自定義代碼提示效果的相關(guān)資料,CodeMirror是一個(gè)網(wǎng)絡(luò)代碼編輯器組件,它可以在網(wǎng)站中用于實(shí)現(xiàn)支持多種編輯功能的文本輸入字段,并具有豐富的編程接口以允許進(jìn)一步擴(kuò)展,需要的朋友可以參考下2023-08-08
JavaScript之DOM插入更新刪除_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了JavaScript之DOM插入更新刪除,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
Layer.js實(shí)現(xiàn)表格溢出內(nèi)容省略號顯示,懸停顯示全部的方法
今天小編就為大家分享一篇Layer.js實(shí)現(xiàn)表格溢出內(nèi)容省略號顯示,懸停顯示全部的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09
詳解JavaScript中typeof與instanceof用法
typeof用以獲取一個(gè)變量或者表達(dá)式的類型而instanceof用于判斷一個(gè)變量是否某個(gè)對象的實(shí)例,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-10-10
User Scripts: Video Download by User Scripts
User Scripts: Video Download by User Scripts...2007-05-05
JS實(shí)現(xiàn)點(diǎn)擊發(fā)送驗(yàn)證碼 xx秒后重新發(fā)送功能
在一些注冊類的網(wǎng)站,經(jīng)常遇到這樣的需求,點(diǎn)擊發(fā)送驗(yàn)證碼,xx秒后重新發(fā)送,這樣的功能怎么實(shí)現(xiàn)呢,接下來通過本文給大家分享js點(diǎn)擊發(fā)送驗(yàn)證碼 xx秒后重新發(fā)送功能,需要的朋友參考下吧2019-07-07
JavaScript使用鍵盤輸入控制實(shí)現(xiàn)數(shù)字驗(yàn)證功能
根據(jù)鍵盤輸入的keycode來判斷輸入的是什么類型來實(shí)現(xiàn)數(shù)字驗(yàn)證功能,就簡單幾行代碼就可以實(shí)現(xiàn),對js數(shù)字驗(yàn)證功能感興趣的朋友一起看下吧2016-08-08
javascript中for...of和for..in循環(huán)的區(qū)別
JS中循環(huán)語句眾多,你是否也有用的時(shí)候突然不知道用哪個(gè)的經(jīng)歷,本文主要介紹了javascript中for...of和for..in循環(huán)的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08

