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

标签 javascript object reference copy

我有一些我知道的全局变量,糟糕的代码等等。 这些变量之一: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/

相关文章:

javascript - 处理多个复选框和复杂的数据结构(reactjs)

c# - .NET,Equal() 只是 == 吗?

JavaScript 窗口高度

php - 支持节假日的日历库

Javascript 书签可以在 Windows 上工作,但不能在 Mac 上工作

javascript - 用空格和破折号分割字符串

java - 如何打印出类中每个对象的所有数据?

javascript - 迭代一个对象以查找哪些是缺失的数字并为其分配一个值

c++ - 对类::函数的 undefined reference

c++ - 使用引用而不是指针可以解决 C++ 中的内存泄漏问题吗?