通过引用更新嵌套对象

时间:2015-12-08 16:09:44

标签: javascript mutable

考虑这个例子:

example 1

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

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

example 2

如您所见,该对象尚未更新

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

enter image description here

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

2 个答案:

答案 0 :(得分:2)

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

var ref = originalObj;

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

在此:

var fooRef = originalObj.foo;

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

  

我该怎样绕过它?

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

答案 1 :(得分:0)

没有对原始类型的引用,正在复制该值。 如果需要引用,请将此值包装在对象中并指向对象