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è)問題。
嘗試了將近半個(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)文章
js中如何對(duì)嵌套數(shù)組進(jìn)行filter過濾
這篇文章主要介紹了js中如何對(duì)嵌套數(shù)組進(jìn)行filter過濾問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06基于d3.js/neovis.js/neod3.js實(shí)現(xiàn)鏈接neo4j圖形數(shù)據(jù)庫(kù)的圖像化顯示功能
neovis.js?由vis.js支持的圖形可視化以及來自Neo4j的數(shù)據(jù)。這篇文章主要介紹了基于d3.js/neovis.js/neod3.js實(shí)現(xiàn)鏈接neo4j圖形數(shù)據(jù)庫(kù)的圖像化顯示功能,需要的朋友可以參考下2022-02-02js實(shí)現(xiàn)ASP分頁(yè)函數(shù) HTML分頁(yè)函數(shù)
js實(shí)現(xiàn)ASP分頁(yè)函數(shù) HTML分頁(yè)函數(shù)...2006-09-09js實(shí)現(xiàn)鍵盤上下左右鍵選擇文字并顯示在文本框的方法
這篇文章主要介紹了js實(shí)現(xiàn)鍵盤上下左右鍵選擇文字并顯示在文本框的方法,涉及javascript操作鍵盤事件及文本框的相關(guān)技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-05-05懶就要懶到底——鼠標(biāo)自動(dòng)點(diǎn)擊(含時(shí)間判斷)
懶就要懶到底——鼠標(biāo)自動(dòng)點(diǎn)擊(含時(shí)間判斷)...2007-02-02JS實(shí)現(xiàn)的3des+base64加密解密算法完整示例
這篇文章主要介紹了JS實(shí)現(xiàn)的3des+base64加密解密算法,結(jié)合完整實(shí)例形式分析了JavaScript實(shí)現(xiàn)的3des+base64加密解密算法簡(jiǎn)單使用技巧,需要的朋友可以參考下2018-05-05