【问题标题】:Javascript combine two objects keeping referencesJavascript 结合两个保持引用的对象
【发布时间】:2013-09-23 23:12:24
【问题描述】:

我想做的一个简单的例子:

data = {name: 'fred'};

newData = {};
newData.name = data.name;

newData.name = 'ted';

console.log(data.name); // I want this to be ted not fred

是否可以在 Javascript 中编辑第二个对象并让它修改第一个对象?我正在使用alloyui 1.5(yui 3.4.0)并尝试合并对象以创建数据表,因此数据显示在单行上,但它需要可编辑,因此它需要指向原始对象。

这样的事情可能吗,还是我需要使用事件将数据推送回第一个对象?

【问题讨论】:

标签: javascript


【解决方案1】:

如果你的对象的属性也是一个对象,你可以这样做。这有效:

data = {name: {first:'fred'}};

newData = {};
newData.name = data.name;

newData.name.first = 'ted';

console.log(data.name.first) // outputs ted

【讨论】:

  • 但是如果我告诉你'fred'是一个对象呢:P
  • @ManuelGörlich 没关系,name.first 将引用一个新对象然后:jsfiddle.net/6H8VG
【解决方案2】:

是的,您可以使用 javascripts Object() 将第一个(您的数据对象)的新对象引用作为 newData。 更改任一对象属性会反映到另一个对象

data = {name: 'fred'};

var newData = new Object(data);

newData.name = 'ted';

console.log(data.name);// outputs ted

你可以阅读更多关于 Object() here

【讨论】:

  • new Object(data) 不会创建新的对象引用。你应该注意这个例子中的newData === data
  • 您不需要 javascript 默认通过引用传递对象,因此 data = {name: 'ted'}; newData = data; newData.name = 'fred'; 将实现完全相同的效果。我认为 OP 想要的是将 data 的各种属性复制到 newData 而不需要两个相同的对象。所以他仍然可以向newData 添加不应该在data 上的属性。只要值不是像字符串这样的不可变对象,这不是一个大问题。
  • 正如 Manuel Görlich 提到的,我正在尝试使用各种属性而不是同一个对象。我不知道字符串是不可变的,所以感谢 Manuel。
猜你喜欢
  • 2021-08-01
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多