gpt4 book ai didi

javascript - 按引用复制

转载 作者:行者123 更新时间:2023-11-30 07:22:24 24 4
gpt4 key购买 nike

据我所知,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 c = a;
c.setobj({x:4,y:5});
console.log(c.obj); //prints {x:4,y:5}
console.log(a.obj); //prints {x:4,y:5}
console.log(b.obj); //prints {x:4,y:5}

但是:

console.log(m); //prints {u:1,v:2,w:3}

我期望 m 包含 b.obj 的引用,其中 b 包含 a 的引用。后者有效,但前者(m 的引用)无效。请提供对此的见解并告诉我我错过了什么。这是我的愚蠢假设还是有什么我不知道的?

最佳答案

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

因此,当您编写 m = b.obj 时,m直接指向对象 1、2、3。 m 不是对 b.obj 的引用,而是对(顺便说一下)与 b.obj 是引用的同一对象的引用.
所以 mb.obj 都是(现在不相关的)对同一个对象 1,2,3 的引用。

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

关于javascript - 按引用复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33974948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com