JavaScript創(chuàng)建命名空間(namespace)的最簡實現(xiàn)
更新時間:2007年12月11日 18:57:54 投稿:mdxy-dxy
JavaScript創(chuàng)建命名空間(namespace)通過自定義函數(shù)進行類型判斷、數(shù)組遍歷、函數(shù)執(zhí)行等相關操作來實現(xiàn)命名空間的功能,需要的朋友可以參考一下
最近看Ext源代碼,看到了其實現(xiàn)命名空間函數(shù)的實現(xiàn)方法:
Ext NameSpace實現(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]];
}
}
}
鄙人喜好最簡編程(這很多時候并不是一個好習慣,寫的越簡單程序一般越難理解),于是就想用更短的方式解決這個問題。
嘗試了將近半個小時寫下了下面的實現(xiàn),基本該考慮的情況都考慮,至少不會覆蓋頁面已經存在的函數(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+"={}")}
}
}
你可以保存以下代碼進行測試:
測試代碼:
復制代碼 代碼如下:
<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>
相關文章
微信小程序使用setData修改數(shù)組中單個對象的方法分析
這篇文章主要介紹了微信小程序使用setData修改數(shù)組中單個對象的方法,結合具體實例形式分析了setData進行數(shù)組修改的相關操作技巧與注意事項,需要的朋友可以參考下2018-12-12
JavaScript中變量聲明有var和沒var的區(qū)別示例介紹
在函數(shù)內部,有var和沒var聲明的變量是不一樣的。有var聲明的是局部變量,沒var的,聲明的全局變量,所以可以借此向外暴露接口東東2014-09-09
javascript針對不確定函數(shù)的執(zhí)行方法
這篇文章主要介紹了javascript針對不確定函數(shù)的執(zhí)行方法,實例分析了eval函數(shù)及符號屬性兩種執(zhí)行方式,需要的朋友可以參考下2015-12-12
JavaScript數(shù)組實現(xiàn)扁平化四種方法詳解
扁平化,顧名思義就是減少復雜性裝飾,使其事物本身更簡潔、簡單,突出主題。數(shù)組扁平化,對著上面意思套也知道了,就是將一個復雜的嵌套多層的數(shù)組,一層一層的轉化為層級較少或者只有一層的數(shù)組2022-10-10

