对象引用的变量重新分配使其他对象保持不变(无“传递”分配)
Posted
技术标签:
【中文标题】对象引用的变量重新分配使其他对象保持不变(无“传递”分配)【英文标题】:Variable re-assignment of object reference leaves other object unaltered (no “transitive” assignment) 【发布时间】:2017-06-08 10:31:59 【问题描述】:我有一个想要替换的对象。
var obj1 = x: "a" ;
var ref = obj1;
var obj2 = y: "b" ;
obj1 = obj2;
这导致ref
等同于 x: "a"
,但我希望它也可以更改为指向obj2
以使ref
等同于 y: "b"
。
【问题讨论】:
不是很清楚,你想要什么 我基本上想替换对一个对象的引用。所以当我做 obj1 = obj2 时,我希望所有对 obj1 的引用都被替换为对 obj2 的引用 这不是javascript的工作方式:) @ValLeNain 这就是我已经想到的,但你永远不会知道。通常有一些我仍然不知道的解决方法。显然不是这次:) 【参考方案1】:不可能。 JS 通过引用的副本传递对象,因此在步骤var ref = obj1
中,您实际上并没有像在 C 之类的语言中那样分配引用指针。相反,您正在创建指向对象的引用的副本看起来像x: 'a'
。
有关您拥有的其他选项,请参阅此答案:https://***.com/a/17382443/6415214。
【讨论】:
【参考方案2】:你可以尝试用obj2的字段来改变obj1的所有字段
var obj1 = x: 'a' ;
var ref = obj1;
var obj2 = y: 'b' ;
obj1.x = obj2.y;
console.log(ref) // Print x, 'b'
如果你想添加 y,'b' 你可以按照方法
obj1.y=obj2.y
console.log(obj1); prints x: "b", y: "b"
console.log(ref); prints x: "b", y: "b"
如果你想删除 obj1.x,你可以这样做
delete obj1.x;
console.log(ref) prints y:'b'
【讨论】:
以上是关于对象引用的变量重新分配使其他对象保持不变(无“传递”分配)的主要内容,如果未能解决你的问题,请参考以下文章