JavaScript創(chuàng)建命名空間(namespace)的最簡(jiǎn)實(shí)現(xiàn)
最近看Ext源代碼,看到了其實(shí)現(xiàn)命名空間函數(shù)的實(shí)現(xiàn)方法:
Ext NameSpace實(shí)現(xiàn)代碼:
namespace : function(){
var a=arguments, o=null, i, j, d, rt;
for (i=0; i<a.length; ++i) {
d=a[i].split(".");
rt = d[0];
eval('if (typeof ' + rt + ' == "undefined"){' + rt + ' = {};} o = ' + rt + ';');
for (j=1; j<d.length; ++j) {
o[d[j]]=o[d[j]] || {};
o=o[d[j]];
}
}
}
鄙人喜好最簡(jiǎn)編程(這很多時(shí)候并不是一個(gè)好習(xí)慣,寫的越簡(jiǎn)單程序一般越難理解),于是就想用更短的方式解決這個(gè)問(wèn)題。
嘗試了將近半個(gè)小時(shí)寫下了下面的實(shí)現(xiàn),基本該考慮的情況都考慮,至少不會(huì)覆蓋頁(yè)面已經(jīng)存在的函數(shù)。
實(shí)現(xiàn)代碼如下:
function namespace(ns){
if(typeof(ns)!="string")return;
ns=ns.split(".");
var o,ni;
for(var i=0,len=ns.length;i<len,ni=ns[i];i++){
try{o=(o?(o[ni]=o[ni]||{}):(eval(ni+"="+ni+"||{}")))}catch(e){o=eval(ni+"={}")}
}
}
你可以保存以下代碼進(jìn)行測(cè)試:
測(cè)試代碼:
<script type="text/javascript">
<!--
function namespace(ns){
if(typeof(ns)!="string")return;
ns=ns.split(".");
var o,ni;
for(var i=0,len=ns.length;i<len,ni=ns[i];i++){
try{o=(o?(o[ni]=o[ni]||{}):(eval(ni+"="+ni+"||{}")))}catch(e){o=eval(ni+"={}")}
}
}
function a(){return 5}
namespace("a.b");
alert(a);
alert(a.b)
namespace("test.test.abc")
test.test.abc.func1=function(){
alert('func1 run')
}
alert(test.test)
test.test.abc.func1();
//-->
</script>
相關(guān)文章
微信小程序使用setData修改數(shù)組中單個(gè)對(duì)象的方法分析
這篇文章主要介紹了微信小程序使用setData修改數(shù)組中單個(gè)對(duì)象的方法,結(jié)合具體實(shí)例形式分析了setData進(jìn)行數(shù)組修改的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-12-12
JS面試題---關(guān)于算法臺(tái)階的問(wèn)題
下面小編就為大家?guī)?lái)一篇JS面試題---關(guān)于算法臺(tái)階的問(wèn)題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07
element-ui 上傳圖片后標(biāo)注坐標(biāo)點(diǎn)
有個(gè)組件庫(kù)的名稱叫做element-ui,基于Vue2.0開發(fā),提供了豐富的PC端組件,本文通過(guò)實(shí)例代碼給大家介紹element-ui 上傳圖片后標(biāo)注坐標(biāo)點(diǎn)的示例代碼,感興趣的朋友跟隨小編一起看看吧2021-07-07
JavaScript中變量聲明有var和沒var的區(qū)別示例介紹
在函數(shù)內(nèi)部,有var和沒var聲明的變量是不一樣的。有var聲明的是局部變量,沒var的,聲明的全局變量,所以可以借此向外暴露接口東東2014-09-09
JsRender for object語(yǔ)法簡(jiǎn)介
這篇文章主要介紹了JsRender for object語(yǔ)法,以實(shí)例形式講述了for Object的用法,需要的朋友可以參考下2014-10-10
javascript針對(duì)不確定函數(shù)的執(zhí)行方法
這篇文章主要介紹了javascript針對(duì)不確定函數(shù)的執(zhí)行方法,實(shí)例分析了eval函數(shù)及符號(hào)屬性兩種執(zhí)行方式,需要的朋友可以參考下2015-12-12
JavaScript數(shù)組實(shí)現(xiàn)扁平化四種方法詳解
扁平化,顧名思義就是減少?gòu)?fù)雜性裝飾,使其事物本身更簡(jiǎn)潔、簡(jiǎn)單,突出主題。數(shù)組扁平化,對(duì)著上面意思套也知道了,就是將一個(gè)復(fù)雜的嵌套多層的數(shù)組,一層一層的轉(zhuǎn)化為層級(jí)較少或者只有一層的數(shù)組2022-10-10

