我有一些我知道的全局变量,糟糕的代码等等。 这些变量之一:MyApp.player.pet,是宠物类型的对象,附加到玩家对象。它有一些属性,例如“xp”,它只是一个数字。
我将这个对象传递给一个显示各种对象信息的动态 UI 类,这就是为什么我不能在对象内部使用对全局变量的引用。这是我通过它的方式:
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 更改时,工具提示文本中的值也会更改?
最佳答案
你的问题有一些误解:
- 您没有创建原始对象的副本。
- 您只是通过将它们放入新对象(例如
{"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;
关于javascript - 对象被复制,但我想要原件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50895340/