本帖最后由 womakelovewithnima 于 2010-11-01 22:42:41 编辑

解决方案 »

  1.   

    makelove同学,vv的修改无论如何都会影响到v的,他们同用相同的内存空间,当然会影响。
    当然,你可以重新定义一个v2对象,用for in语句把v的属性和属性值赋给它,然后vv放心的引用v2。就可以达到你想要的了。
      

  2.   

    v 是一个对象,是传址调用,所以要改变原对象的值!
    创建一个克隆方法就可以了
    function clone(myObj){
      if(typeof(myObj) != 'object') return myObj;
      if(myObj == null) return myObj;
      
      var myNewObj = new Object();
      
      for(var i in myObj)
         myNewObj[i] = clone(myObj[i]);
      
      return myNewObj;
    }
    var v={blcok:"123",text:"234"}
    var vv={flag:"222",av:clone(v)}
    vv.av.text="333";
    alert(v.text);
      

  3.   

    经我的程序测试,这种方法是错误的,下面的这种才是正确的!1.clone = function(o) {   
    2.    if(!o || 'object' !== typeof o) {   
    3.        return o;   
    4.    }   
    5.    if('function' === typeof o.clone) {   
    6.        return o.clone();   
    7.    }   
    8.    var c = '[object Array]' === Object.prototype.toString.call(o) ? [] : {};   
    9.    var p, v;   
    10.    for(p in o) {   
    11.        if(o.hasOwnProperty(p)) {   
    12.            v = o[p];   
    13.            if(v && 'object' === typeof v) {   
    14.                c[p] = clone(v);   
    15.            }   
    16.            else {   
    17.                c[p] = v;   
    18.            }   
    19.        }   
    20.    }   
    21.    return c;   
    22.};  
      

  4.   

    clone是可以的,记住在js中对象引用的是相同的内存空间