JavaScript创建命名空间(namespace)的最简实现


Posted in Javascript onDecember 11, 2007

最近看Ext源代码,看到了其实现命名空间函数的实现方法:

Ext NameSpace实现代码: 
      

  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]];  

                }  

            }  

        } 

鄙人喜好最简编程(这很多时候并不是一个好习惯,写的越简单程序一般越难理解),于是就想用更短的方式解决这个问题。
尝试了将近半个小时写下了下面的实现,基本该考虑的情况都考虑,至少不会覆盖页面已经存在的函数。

实现代码如下:

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>
Javascript 相关文章推荐
jquery 学习笔记 传智博客佟老师附详细注释
Sep 12 Javascript
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
Mar 04 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
Jul 23 Javascript
使用Post提交时须将空格转换成加号的解释
Jan 14 Javascript
Node.js与PHP、Python的字符处理性能对比
Jul 06 Javascript
laytpl 精致巧妙的JavaScript模板引擎
Aug 29 Javascript
javascript html实现网页版日历代码
Mar 08 Javascript
浅析BootStrap模态框的使用(经典)
Apr 29 Javascript
使用jQuery Ajax 请求webservice来实现更简练的Ajax
Aug 04 Javascript
js实现省市级联效果分享
Aug 10 Javascript
基于jquery实现五星好评
Nov 18 jQuery
详解Vue改变数组中对象的属性不重新渲染View的解决方案
Sep 21 Javascript
js模拟实现Array的sort方法
Dec 11 #Javascript
看了就知道什么是JSON
Dec 09 #Javascript
javascript while语句和do while语句的区别分析
Dec 08 #Javascript
js中将多个语句写成一个语句的两种方法小结
Dec 08 #Javascript
JavaScript开发时的五个注意事项
Dec 08 #Javascript
JS的递增/递减运算符和带操作的赋值运算符的等价式
Dec 08 #Javascript
javascript数组使用调用方法汇总
Dec 08 #Javascript
You might like
默默小谈PHP&amp;MYSQL分页原理及实现
2007/01/02 PHP
php下使用strpos需要注意 === 运算符
2010/07/17 PHP
PHP文件上传原理简单分析
2011/05/29 PHP
深入phpMyAdmin的安装与配置的详细步骤
2013/05/07 PHP
php隐藏实际地址的文件下载方法
2015/04/18 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
js textarea自动增高并隐藏滚动条
2009/12/16 Javascript
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
2011/09/28 Javascript
cnblogs 代码高亮显示后的代码复制问题解决实现代码
2011/12/14 Javascript
使用js检测浏览器的实现代码
2013/05/14 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
浅谈Vue的基本应用
2016/12/27 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
Nodejs 复制文件/文件夹的方法
2017/08/24 NodeJs
基于vue2实现上拉加载功能
2017/11/28 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
2018/01/12 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
2019/07/03 jQuery
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
2020/04/13 Javascript
Element Rate 评分的使用方法
2020/07/27 Javascript
python实现数通设备tftp备份配置文件示例
2014/04/02 Python
Python和JavaScript间代码转换的4个工具
2016/02/22 Python
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
浅析python继承与多重继承
2018/09/13 Python
详解Python匿名函数(lambda函数)
2019/04/19 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
Python-jenkins模块之folder相关操作介绍
2020/05/12 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
June Jacobs尊积帕官网:知名的spa水疗护肤品牌
2019/03/21 全球购物
校园歌手大赛策划书
2014/01/17 职场文书
关于责任的演讲稿
2014/05/20 职场文书
详解Flask开发技巧之异常处理
2021/06/15 Python
python 闭包函数详细介绍
2022/04/19 Python