镜像 Javascript 变量变化
Mirror Javascript Variable Changes
我正在尝试创建一个对象关系,其中对象 2 的 nextString
属性 将反映对对象 1 的 originalString
.
的任何更改
var object1 = {
nestedObject: {
originalString: "old"
}
}
var object2 = {
nextString: object1.nestedObject.originalString
}
object1.nestedObject.originalString = "new";
originalString 现在是 "new" 但 nextString 仍然是 "old"
我读到这是由于 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);
我正在尝试创建一个对象关系,其中对象 2 的 nextString
属性 将反映对对象 1 的 originalString
.
var object1 = {
nestedObject: {
originalString: "old"
}
}
var object2 = {
nextString: object1.nestedObject.originalString
}
object1.nestedObject.originalString = "new";
originalString 现在是 "new" 但 nextString 仍然是 "old"
我读到这是由于 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);