我正在尝试创建一个对象关系,其中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);