源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
楼主: ttx9n

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

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2018-12-25 07:40:27 | 显示全部楼层 |阅读模式
JavaScript创建命名空间(namespace)通过自定义函数进行类型判断、数组遍历、函数执行等相关操作来实现命名空间的功能,需要的朋友可以参考一下

最近看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>

回复

使用道具 举报

2

主题

2万

回帖

67

积分

注册会员

Rank: 2

积分
67
发表于 2022-8-11 12:13:58 | 显示全部楼层
vcxvcxv
回复 支持 反对

使用道具 举报

1

主题

2万

回帖

307

积分

中级会员

Rank: 3Rank: 3

积分
307
发表于 2022-9-14 01:44:01 | 显示全部楼层
哈哈哈哈哈哈哈
回复 支持 反对

使用道具 举报

12

主题

2万

回帖

431

积分

中级会员

Rank: 3Rank: 3

积分
431
发表于 2022-12-21 18:34:34 | 显示全部楼层
建军节建军节建军节建军节
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

66

积分

注册会员

Rank: 2

积分
66
发表于 2024-3-5 06:18:24 | 显示全部楼层
逛逛看看瞧瞧
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

87

积分

注册会员

Rank: 2

积分
87
发表于 2024-5-15 19:07:54 | 显示全部楼层
激动人心,无法言表!
回复 支持 反对

使用道具 举报

1

主题

2万

回帖

69

积分

注册会员

Rank: 2

积分
69
发表于 2024-5-18 11:29:00 | 显示全部楼层
很不错的样子
回复 支持 反对

使用道具 举报

11

主题

1万

回帖

103

积分

注册会员

Rank: 2

积分
103
发表于 2024-8-21 21:40:28 | 显示全部楼层
儿飞飞微风DVD谁vdsvd
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2024-9-2 13:01:38 | 显示全部楼层
来看看!!!
回复 支持 反对

使用道具 举报

13

主题

2万

回帖

97

积分

注册会员

Rank: 2

积分
97
发表于 2024-9-9 16:06:17 | 显示全部楼层
谢谢小Y分享
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

GMT+8, 2025-1-31 17:04 , Processed in 0.076810 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表