function ns(pkg) {
if (!pkg) {
return null;
}
var o = {};
var arr = pkg.split('.');
o = o[[ arr[0] ]] = {};
var len = arr.length;
for ( var i = 1; i < len; i++) {
o = o[arr[i]] = {};
}
return o;
}
var pkg = ns("com.momo.test");
alert(pkg.com);
这儿弹出的是undefine,断点调试显示pkg也是undefine这是怎么回事??命名空间JavaScript

解决方案 »

  1.   

    alert(pkg.com);都没看懂你这写的什么
      

  2.   

    function ns(pkg) {
        if (!pkg) {
            return null;
        }
        var o = {},x;
        var arr = pkg.split('.');
        x = o[[ arr[0] ]] = {};
        var len = arr.length;
        for ( var i = 1; i < len; i++) {
            x = x[arr[i]] = {};
        }
        return o;
    }你每次都将o给重新赋值而不是指向新的{},最后出来的不知道是啥玩意了,改一下。
      

  3.   

    function ns(pkg) {
    if (!pkg) {
    return null;
    }
    var o = {};
    var arr = pkg.split('.');
      if(arr.length){
        var currentPath = o;
        var len = arr.length;
        for ( var i = 0; i < len; i++) {
          currentPath[arr[i]] = {};
          currentPath = currentPath[arr[i]];
        }
      }
    return o;
    }function test(){
      var pkg = ns('com.momo.test');
      console.log(pkg);
    }
    lz要的应该是这个效果吧- -.
      

  4.   


    按照3楼所说,断点调试显示pkg任然是undefine,关于js对象赋值的问题
    如  x=arr[0]={},x=arr[1]={},像这种形式x的值arr[0]没有被arr[1]覆盖,任然可以通过{x[arr[0]]}arr[1]一层一层访问是什么原理??
      

  5.   

    你敢不敢再向下一行,看看是不是undefined了
      

  6.   

    function ns(v){
    v = v.split(".");//返回字符串数组  
        var o = window[v[0]] = window[v[0]] || {};
        for(var i = 1 ; i < v.length ; ++i){
         o = o[v[i]] = o[v[i]] || {};  
        }
    }
    ns("com.momo.test");
    alert(com.momo.test);
      

  7.   

    js的命名空间简化 
    var arr = new Array(3)
    arr[0] = "Father"
    arr[1] = "Son"
    arr[2] = "Grandson"
    var o = {};
    o=o[arr[0]]=o[arr[0]] || {};
    o=o[arr[1]]=o[arr[1]] || {};
    o=o[arr[2]]=o[arr[2]] || {};
    结果是Father Father.son都是undefine,这是怎么回事???
      

  8.   

    function ns(pkg) {
        if (!pkg) {
            return null;
        }
        var o = {},x;
        var arr = pkg.split('.');
        x = o[[ arr[0] ]] = {};
        var len = arr.length;
        for ( var i = 1; i < len; i++) {
            x = x[arr[i]] = {};
        }
        return o;
    }var result = ns('com.momo.test');
    console.log(result)
    console.log(result.com)
    console.log(result.com.momo)
    console.log(result.com.momo.test)