用尽办法也不行 function b(){ this.a=function(x, y){ x = [y, y = x][0] alert(x + "\r\n" + y)//44 33 } } var bb=new b bb.a.b=[33],bb.a.c=[44] bb.a([bb.a.b],[bb.a.c]) alert(bb.a.b+"\r\n"+bb.a.c)//33 44
好像弄明白了 var a=['aa'] var b=a b[0]="sss" alert(a)//弹出sssvar a=['aa'] var b=a b="sss"//改变了引用 alert(a)//弹出aa因为永远也不可能下面这样 function a(x[0],y[0]){//<-------错的 x=[y,y=x][0] alert(x+"\r\n"+y)//44 33 } 所以相当于改变了引用
function a(x,y){
x=[y,y=x][0]
alert(x+"\r\n"+y)//44 33
}
a.b=[33],a.c=[44]
a(a.b,a.c)
alert(a.b+"\r\n"+a.c)//33 44function a(x,y){
x=[y,y=x][0]
alert(x+"\r\n"+y)//44 33
}
a.b=[33],a.c=[44]
a([a.b],[a.c])
alert(a.b+"\r\n"+a.c)//33 44
function b(){
this.a=function(x, y){
x = [y, y = x][0]
alert(x + "\r\n" + y)//44 33
}
}
var bb=new b
bb.a.b=[33],bb.a.c=[44]
bb.a([bb.a.b],[bb.a.c])
alert(bb.a.b+"\r\n"+bb.a.c)//33 44
var a=['aa']
var b=a
b[0]="sss"
alert(a)//弹出sssvar a=['aa']
var b=a
b="sss"//改变了引用
alert(a)//弹出aa因为永远也不可能下面这样
function a(x[0],y[0]){//<-------错的
x=[y,y=x][0]
alert(x+"\r\n"+y)//44 33
}
所以相当于改变了引用
a(b,c)将复制一个b'和一个c',并将它们传递给a函数,在a函数内操作x,y只会影响b'和c',不会影响b和c
但是在函数中操作b'和c'指向的值将会产生影响
这样试试:function a(x,y){
var tmp = x[0];
x[0] = y[0];
y[0] = tmp;
alert(x+"\r\n"+y);
}
var b=[33],c=[44];
a(b,c);
alert(b+"\r\n"+c);
把原理带到原来的式子上 就是下面这样了
function a(x,y){
x[0]=[y[0],y[0]=x[0]][0]
alert(x+"\r\n"+y);//弹出44 33
}
var b=[33],c=[44];
a(b,c);
alert(b+"\r\n"+c);//弹出44 33
例如我们经常做的.
把事件控件传进去时用的this
在方法中改变其属性是真的改变了的.所以这个更加像C中的指针.
function a(x,y){
x=[y,y=x][0]
alert(x+"\r\n"+y);//弹出 function(y){} function(x){}
}
var b=function(x){},c=function(y){};
a(b,c);
alert(b+"\r\n"+c);//弹出function(x){} function(y){}
每个人的理解不一样吧,我们的结果是相同的:)
嗯
我能理解你复制的意义.
也没和你的冲突.
的确是复制了.
只是复制的是地址指向.
也就是常说的指针.
所以在函数中.
就算对传入的function(obj)中的obj赋值.
也是改变不了this的.
因为obj只是指向this.
而不是实际上的this.
obj只能是obj.
但是obj.a则不同.
他的确就是this.a;
因为他是指向this的实际地址下的a.
所以改变obj.a的时候this.a实际也改变了.