对象被复制,但我想要原件

时间:2018-06-17 09:25:45

标签: javascript object reference copy

我有一些全球变量,我知道,坏代码等等。 其中一个变量:MyApp.player.pet,是pet类型的对象,附加到玩家对象。它有一些属性,如“xp”,它只是一个数字。

我将此对象传递给动态UI类,该类显示有关所有类型对象的信息,这就是为什么我不能使用对象内部的全局var的引用。以下是我通过它的方式:

 var listOfProperties =
        [MyApp.player.pet.name,
        {"xp: ": MyApp.player.pet.xp},
        {"xpToNextLevel: " :  MyApp.player.pet.xpToNextLevel}];

然后我将这个属性列表转移到一个新的UI对象:

new tooltipText(listOfProperties, ..., ...)

但是,当在MyApp.player.pet.xp中更新值时,对象tooltipText中的值不会更改。不知怎的,它正在传递副本,但如果这些是正确的术语,我想传递一个引用。

我已经尝试过搜索这个,但我能找到的只是人们问如何制作物品的副本,这似乎是我无意中完成的,但不是我想要的。

如何确保当MyApp.player.pet.xp发生变化时,tooltiptext中的值也会发生变化?

1 个答案:

答案 0 :(得分:1)

你的问题有一些误解:

  • 您没有创建原始对象的副本。
  • 您只是将一些属性复制到新对象中(例如{"xp: ": MyApp.player.pet.xp})。

如果要更改原始对象的属性,则需要在那里更改它们,而不是在新创建的小对象中更改。

因此,如果您想要一个通用的属性列表,您还需要保留对原始对象(MyApp.player.pet)的引用。例如:

var listOfProperties = {
  obj: MyApp.player.pet,
  propertyNames: ['xp', 'xpToNextLevel']
}

然后,您可以使用属性名称来一般性地设置原始对象的属性:

var propertyName = listOfProperties.propertyNames[0];
listOfProperties.obj[propertyName] = newValue;