【问题标题】: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 这就是我已经想到的,但你永远不会知道。通常有一些我仍然不知道的解决方法。显然不是这次:)

标签: javascript variables reference pass-by-reference


【解决方案1】:

不可能。 JS 通过引用的副本传递对象,因此在步骤var ref = obj1 中,您实际上并没有像在 C 之类的语言中那样分配引用指针。相反,您正在创建指向对象的引用的副本看起来像{x: 'a'}

有关您拥有的其他选项,请参阅此答案:https://stackoverflow.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'}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      • 2012-05-26
      • 2014-12-07
      • 2012-07-21
      • 2016-11-16
      • 1970-01-01
      相关资源
      最近更新 更多