据我所知,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);
Run Code Online (Sandbox Code Playgroud)
它打印 - {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}
Run Code Online (Sandbox Code Playgroud)
但:
console.log(m); //prints {u:1,v:2,w:3}
Run Code Online (Sandbox Code Playgroud)
我期待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仍然是对原始对象的引用.
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |