解决方案 »

  1.   

    原因不太明白。
    不过 能够发现一个现象。
    方法内,如果直接给属性赋值,可以改变传入对象的值。
    但是如果 重新new 一个object。就不会改变了。function foo(v3){v3.b=4;v3={a:3};alert(v3.a);alert(v3.b);}var v4={};foo(v4);alert(v4.a);alert(v4.b);
      

  2.   

    在这里,形参 obj 不是 Person 而是 Person 的引用
    即 obj 是一个变量,其值和 Person 都指向同一个变量表项
    这样写的话,你应该是理解的a = {a:1};
    b = a;
    alert(b.a); //1
    b = {a:2};
    alert(b.a); //2
    alert(a.a); //1
    对于function SetName(obj){
      obj.name="Tom";
      obj=new Object(); //obj 不再是 Person 的引用了
      obj.name="Lucy";
    }
      

  3.   

    不要意思,最近出了很多的事情,没有及时处理这个帖子,对不起各位了~
    function SetName(obj){
    obj.name="Tom";
    obj=new Object();
    obj.name="Lucy";
    }
    Person=new Object();//声明Person对象
    SetName(Person);//
    alert(Person.name);//输出Tom
    我觉得上面这个例子
    在执行了obj=new Object()这句话之前,Obj和Person是同一个对象的属性"Tom",
    在执行了obj=new Object()这句话之后,Obj和Person就不在是同一个对象了,
    所以才会出现书中的那个结论,
    但是我觉得那个结论不足以支持,说明在JavaScript中对象类型是按值传递的
    我感觉xuzuning版主的意思,似乎也觉得对象是按引用传递的?
    可是我就是不知道该怎么去理解JavaScript中对象是按值传递这个问题。
    请各位不吝赐教~
      

  4.   

    new Object() 后原本的指向就断掉了。 它改了 arg 的obj ,你在函数内如果继续使用obj.name的话就会拿到
    Lucy , 不过函数外面的Person 却还是拿到 Tom ,因为断掉了所以obj.name=Lucy 并不是Person.name=Lucy了就好象
    var a = [1, 2, 3];
    var b = a;
    b = []; 
    alert(a); //还是1,2,3
      

  5.   

     <script>
    function add(arg0){
    return arg0;
    }
    var obj={};var xx=add(obj);
    alert(xx==obj);//true 证明是引用!
    </script>