JavaScript創(chuàng)建命名空間(namespace)的最簡實現(xiàn)
更新時間:2007年12月11日 18:57:54 投稿:mdxy-dxy
JavaScript創(chuàng)建命名空間(namespace)通過自定義函數(shù)進行類型判斷、數(shù)組遍歷、函數(shù)執(zhí)行等相關(guān)操作來實現(xiàn)命名空間的功能,需要的朋友可以參考一下
最近看Ext源代碼,看到了其實現(xiàn)命名空間函數(shù)的實現(xiàn)方法:
Ext NameSpace實現(xiàn)代碼:
復(fù)制代碼 代碼如下:
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),基本該考慮的情況都考慮,至少不會覆蓋頁面已經(jīng)存在的函數(shù)。
實現(xiàn)代碼如下:
復(fù)制代碼 代碼如下:
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+"={}")}
}
}
你可以保存以下代碼進行測試:
測試代碼:
復(fù)制代碼 代碼如下:
<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)文章
基于d3.js/neovis.js/neod3.js實現(xiàn)鏈接neo4j圖形數(shù)據(jù)庫的圖像化顯示功能
neovis.js?由vis.js支持的圖形可視化以及來自Neo4j的數(shù)據(jù)。這篇文章主要介紹了基于d3.js/neovis.js/neod3.js實現(xiàn)鏈接neo4j圖形數(shù)據(jù)庫的圖像化顯示功能,需要的朋友可以參考下2022-02-02js實現(xiàn)ASP分頁函數(shù) HTML分頁函數(shù)
js實現(xiàn)ASP分頁函數(shù) HTML分頁函數(shù)...2006-09-09js實現(xiàn)鍵盤上下左右鍵選擇文字并顯示在文本框的方法
這篇文章主要介紹了js實現(xiàn)鍵盤上下左右鍵選擇文字并顯示在文本框的方法,涉及javascript操作鍵盤事件及文本框的相關(guān)技巧,非常簡單實用,需要的朋友可以參考下2015-05-05JS實現(xiàn)的3des+base64加密解密算法完整示例
這篇文章主要介紹了JS實現(xiàn)的3des+base64加密解密算法,結(jié)合完整實例形式分析了JavaScript實現(xiàn)的3des+base64加密解密算法簡單使用技巧,需要的朋友可以參考下2018-05-05