var Global={}
Global.namespace=function(str){
var arr = str.split("."),o=Global;
for(i=(arr[0]=="Global")?1:0;i<arr.length;i++){
o[arr[i]]=o[arr[i]]||{};
o=o[arr[i]];
}
}
这个函数是给对象gloabl加一个属性
Global.namespace("A");
同等于
Global.A={}
但是我就疑惑了 函数个过程是 吧Global复制给o 然后下面都是对o的操作 也没改变Global啊
为什么外面Global.A 就被声明了呢。这也不是引用赋值啊。
JS 菜都是自学的。大家帮忙解释下

解决方案 »

  1.   

    Global和o都指向同一个对象
    对o的引用操作就是对Global的引用操作
      

  2.   

    o=o[arr[i]]; 
    这句话不就把对象给覆盖了么 怎么解释?
      

  3.   

    o=o[arr[i]]; 是为了给o的属性添加属性 也就是为了给Global的属性添加属性 也是改变Global
      

  4.   

    o和Global引用的同一个对象。
    o=Global
    o=o[arr[i]];可以可以看做是  o的一个属性o[arr[i]] 覆盖了o?
    为什么Global=Global["A"]就不对呢原理不是一样么。