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 相关文章推荐
javascript学习笔记(六) Date 日期类型
Jun 19 Javascript
验证手机号码的JS方法分享
Sep 10 Javascript
jQuery aminate方法定位到页面具体位置
Dec 26 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
Apr 25 Javascript
js简单工厂模式用法实例
Jun 30 Javascript
jQuery实现hover合成事件的方法
Aug 06 Javascript
JS功能代码集锦
May 04 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
Apr 07 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
Aug 19 Javascript
微信小程序wx.request实现后台数据交互功能分析
Nov 25 Javascript
JavaScript 严格模式(use strict)用法实例分析
Mar 04 Javascript
js实现菜单跳转效果
Dec 11 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
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
2014/06/12 PHP
HTML5如何适配 iPhone IOS 底部黑条
2021/03/09 HTML / CSS
window.open()详解及浏览器兼容性问题示例探讨
2014/05/29 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
javascript实现回到顶部特效
2015/05/06 Javascript
Vue.js中数组变动的检测详解
2016/10/12 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
jQuery实现 RadioButton做必选校验功能
2017/06/15 jQuery
微信小程序实现折叠展开效果
2018/07/19 Javascript
p5.js临摹旋转爱心
2019/10/23 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
2015/07/27 Python
Python实现TCP通信的示例代码
2019/09/09 Python
python编写微信公众号首图思路详解
2019/12/13 Python
python3实现从kafka获取数据,并解析为json格式,写入到mysql中
2019/12/23 Python
基于Python的自媒体小助手---登录页面的实现代码
2020/06/29 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
python为什么要安装到c盘
2020/07/20 Python
浅析python 字典嵌套
2020/09/29 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
HTML5实现的震撼3D焦点图动画的示例代码
2019/09/26 HTML / CSS
大韩航空官方网站:Korean Air
2017/10/25 全球购物
英国领先的独立酒精饮料零售商:DrinkSupermarket
2021/01/13 全球购物
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
应届毕业生个人自我评价
2013/09/20 职场文书
公司业务员岗位职责
2014/03/18 职场文书
程序员求职信
2014/04/16 职场文书
高中英语演讲稿范文
2014/04/24 职场文书
建筑节能汇报材料
2014/08/22 职场文书
上课迟到检讨书300字
2014/10/15 职场文书
采购员岗位职责
2015/02/03 职场文书
作弊检讨书范文
2015/05/06 职场文书
2015年语文教研组工作总结
2015/05/23 职场文书
MySQL插入数据与查询数据
2022/03/25 MySQL
Python采集股票数据并制作可视化柱状图
2022/04/04 Python
MySQL索引失效场景及解决方案
2022/07/23 MySQL