Javascript 参照复制
据我所知,JavaScript中的对象是通过引用而不是值复制的。但我编写的以下代码并没有按预期工作。也许我不知道该怎么做。请提供见解和可能的解决方案,以避免此类情况 我的代码:Javascript 参照复制,javascript,Javascript,据我所知,JavaScript中的对象是通过引用而不是值复制的。但我编写的以下代码并没有按预期工作。也许我不知道该怎么做。请提供见解和可能的解决方案,以避免此类情况 我的代码: var a = { obj:{u:1,v:2,w:3}, setobj:function(objj){ this.obj = objj } }; var b = a; var m = b.obj console.log(m); 它打印-{u:1,v:2,w:3} 然后- 但是:
var a = {
obj:{u:1,v:2,w:3},
setobj:function(objj){
this.obj = objj
}
};
var b = a;
var m = b.obj
console.log(m);
它打印-{u:1,v:2,w:3}
然后-
但是:
我希望m包含b.obj的引用,其中b包含a的引用。后者起作用,但前者(m的参考)不起作用。请提供对此的见解,并告诉我我缺少什么。这是我非常愚蠢的假设,还是有什么我不知道的?对象没有被复制,但对对象的引用被复制。引用本身就是值 因此,当您写入
m=b.obj
时,m
直接指向对象1,2,3m
不是对b.obj
的引用,而是对b.obj
作为引用的同一对象的引用。因此
m
和b.obj
都是对同一对象1,2,3的引用(现在不相关)
然后,当覆盖
b.obj
时,该引用将更改为对象4,5,但m
仍然是对原始对象的引用。不会复制该对象,但会复制对该对象的引用。引用本身就是值
因此,当您写入m=b.obj
时,m
直接指向对象1,2,3m
不是对b.obj
的引用,而是对b.obj
作为引用的同一对象的引用。因此
m
和b.obj
都是对同一对象1,2,3的引用(现在不相关)
然后,当您覆盖
b.obj
时,该引用将更改为对象4,5,但m
仍然是对原始对象的引用。{u:1,v:2,w:3}
是一个独立对象,并且有其引用地址。
当您分配obj:{u:1,v:2,w:3}
,obj
参考地址等于
{u:1,v:2,w:3}地址。
当您执行c.setobj({x:4,y:5})时代码>新地址将分配给obj
您的代码等于:
var anotherObject= {u:1,v:2,w:3}
var a = {
obj:anotherObject,
setobj:function(objj){
this.obj = objj
}
};
{u:1,v:2,w:3}
是一个独立的对象,有其引用地址。
当您分配obj:{u:1,v:2,w:3}
,obj
参考地址等于
{u:1,v:2,w:3}地址。
当您执行c.setobj({x:4,y:5})时代码>新地址将分配给obj
您的代码等于:
var anotherObject= {u:1,v:2,w:3}
var a = {
obj:anotherObject,
setobj:function(objj){
this.obj = objj
}
};
是的,你的假设是错误的。m是对存储在b.obj中的对象的引用。稍后您会重写该引用,但它不会神奇地让m指向新对象。另外,“参照复制”也没有多大意义。是的,你的假设是错误的。m是对存储在b.obj中的对象的引用。稍后您会重写该引用,但它不会神奇地让m指向新对象。而且,“参照复制”也没有多大意义。
var anotherObject= {u:1,v:2,w:3}
var a = {
obj:anotherObject,
setobj:function(objj){
this.obj = objj
}
};