通过引用更新嵌套对象

Update nested object by reference

考虑这个例子:

这对我来说是预期的行为,一旦我们更改对象值,originalObj 也会发生突变。

现在考虑这个例子(嵌套对象):

如您所见,对象尚未更新

即使反过来也行不通(更新原始对象不会改变引用):

为什么会发生这种情况,我该如何避免?

没有对基本类型的引用,正在复制值。 如果需要引用,将这个值包裹在一个对象中并指向该对象

在JavaScript中,事物是按值传递的。在您的初始代码中:

var ref = originalObj;

originalObj 已复制到 ref。该值是对对象的 引用 ,因此两个变量都有该引用的独立副本,但它们都引用相同的底层对象。对象的变化反映在两个变量中。

在此:

var fooRef = originalObj.foo;

再次复制 originalObj.foo 的值,但这次该值只是一个数字 1。此时,变量和 属性 具有该值的独立副本,但它只是一个数字,而不是对对象的引用。其中任何一个的变化都不会反映在另一个中。

how can I circumvent it?

通过使用您的第一个代码块 - 您需要对包含要更新的 属性 的对象的引用 - 您无法更新变量或直接通过保留 属性 reference/pointer 到它。