您好,匿名用户
随意问技术百科期待您的加入

关于js生成命名空间的一段代码

0 投票
    function ns(namespace) {
        var _ns = namespace.split(".");
        var cur = window[_ns[0]];
        if(cur === undefined) cur = window[_ns[0]] = {};
        var len = _ns.length;
        for(var i = 1; i < len; i++)
            cur = cur[_ns[i]] = cur[_ns[i]] || {};
        return cur;
    }

这段代码中 cur = cur[_ns[i]] = cur[_ns[i]] || {}; 是什么作用?如何执行?不是很理解cur[_ns[i]] = cur[_ns[i]] 和= cur[_ns[i]] || {};这两部分如何执行。
ps:为何要return cur?跟踪的道德结果只是一个没有内容的object

用户头像 提问 2012年 12月1日 @ Virgo 上等兵 (284 威望)
分享到:

1个回答

0 投票
 
最佳答案
 function ns(namespace) {//假设传进一个包名:willerce.module.music
        var _ns = namespace.split(".");//将包使用.分割为一个数组
        var cur = window[_ns[0]];//window[_ns[0]]在这里就是 window.willerce ,获取 window.willerce 的值
        if(cur === undefined) cur = window[_ns[0]] = {};//如果window.willerce 不存在,赋值一个空对象
        var len = _ns.length;//得到包的长度,就是数组有多长
        for(var i = 1; i < len; i++)//循环赋值
            cur = cur[_ns[i]] = cur[_ns[i]] || {};//如果这个对象为undefined,就创建一个空对象
        //上面这个循环,大概就是判断 willerce.module 是否存在,不存在,赋值为空对象 {},然后将自己cur赋值为willerce.module
        //接着再判断willerce.module.music,同理,不存在就初始化。将 cur 赋值为 cur,这时 cur 就是  willerce.module.music 了

        //最后返回cur

          

        return cur;
    }

这里的命名空间,其实就是一个对象。例如 willerce.module.music 这3段都是对象

我们在给 music 赋值的时候,必须保证 willerce , willerce.module 都是一个对象(包含空对象),而不是 undefined。如果是 undefined,就要赋值为 {}

所以这段代码的过程就是,判断对象是否初始化了,如果没,就始化为空对象。
看懂这段代码,主要就是注意 cur 的变化。还有 undefined || {} 的意思是:如果第一个为undefined,就取第二个。

用户头像 回复 2012年 12月1日 @ Lux 上等兵 (267 威望)
选中 2012年 12月1日 @Virgo
提一个问题:

相关问题

0 投票
1 回复 33 阅读
用户头像 提问 2013年 9月17日 @ Gangplank 上等兵 (314 威望)
0 投票
1 回复 1 阅读
用户头像 提问 2014年 6月7日 @ 爹妈罩我去战斗 上等兵 (131 威望)
0 投票
1 回复 49 阅读
+1 投票
1 回复 47 阅读
用户头像 提问 2012年 12月1日 @ Zyra 上等兵 (289 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...