【问题标题】:Mirror Javascript Variable Changes镜像 Javascript 变量更改
【发布时间】:2018-10-29 12:27:12
【问题描述】:

我正在尝试创建一个对象关系,其中 object2 的 nextString 属性将反映对 object1 的 originalString 的任何更改。

var object1 = {
    nestedObject: {
        originalString: "old"
    }
}
var object2 = {
    nextString: object1.nestedObject.originalString
}
object1.nestedObject.originalString = "new";

originalString 现在是“新的”,但 nextString 仍然是“旧的”

我已经读到这是由于字符串的副本,因为 JS 不像 C 那样使用传递引用作为语言。

有了上面object1和object2之间的示例关系,有没有办法完成我想要的?

【问题讨论】:

  • 以这种方式编写副作用是一个非常糟糕的主意。您是否考虑过简单地创建一个对象来巩固和承载您的活动状态?

标签: javascript object reference pass-by-reference


【解决方案1】:

Javascript 确实使用引用传递,但是当您执行 originalString = "new" 时,实际上是在分配对 originalString 的新引用,因此它不再指向 old 值。

您可以做的是保留对nestedObject 的引用,因为没有重新分配对象,只有其中的字符串。

var object1 = {
    nestedObject: {
        originalString: "old"
    }
}

var object2 = {
    // Hold a reference to the nestedObject
    nestedObject: object1.nestedObject,
}

// Assign a new value
object1.nestedObject.originalString = "new";

// Both objects will reflect the change
console.log(object1.nestedObject.originalString);
console.log(object2.nestedObject.originalString);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-28
    • 2021-02-07
    • 1970-01-01
    • 2016-02-06
    • 2022-11-25
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多