我正在尝试创建一个对象关系,其中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确实使用了按引用传递,但是当您执行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);

09-20 00:54