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
<script> function add(arg0){ return arg0; } var obj={};var xx=add(obj); alert(xx==obj);//true 证明是引用! </script>
不过 能够发现一个现象。
方法内,如果直接给属性赋值,可以改变传入对象的值。
但是如果 重新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);
即 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";
}
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中对象是按值传递这个问题。
请各位不吝赐教~
Lucy , 不过函数外面的Person 却还是拿到 Tom ,因为断掉了所以obj.name=Lucy 并不是Person.name=Lucy了就好象
var a = [1, 2, 3];
var b = a;
b = [];
alert(a); //还是1,2,3
function add(arg0){
return arg0;
}
var obj={};var xx=add(obj);
alert(xx==obj);//true 证明是引用!
</script>