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} 然后- 但是:

据我所知,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}

然后-

但是:


我希望m包含b.obj的引用,其中b包含a的引用。后者起作用,但前者(m的参考)不起作用。请提供对此的见解,并告诉我我缺少什么。这是我非常愚蠢的假设,还是有什么我不知道的?

对象没有被复制,但对对象的引用被复制。引用本身就是值

因此,当您写入
m=b.obj
时,
m
直接指向对象1,2,3
m
不是对
b.obj
的引用,而是对
b.obj
作为引用的同一对象的引用。
因此
m
b.obj
都是对同一对象1,2,3的引用(现在不相关)


然后,当覆盖
b.obj
时,该引用将更改为对象4,5,但
m
仍然是对原始对象的引用。

不会复制该对象,但会复制对该对象的引用。引用本身就是值

因此,当您写入
m=b.obj
时,
m
直接指向对象1,2,3
m
不是对
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
    }
};