1

所以我的问题很简单,但我无法解决它。我有 2 个对象,一个是临时的,第二个是永久的,临时对象从永久对象中获取数据,但是当我对临时对象执行操作时,永久对象链接也示例:

var permObject = {
    data1: 1,
    data2: 4,   
}
tmpObject = permObject
tmpObject.data2 -= tmpObject.data1;
console.log(tmpObject.data2); //data2 = 3
console.log(permObject.data2); //data2 = 3

所以我的问题是,我怎样才能将数据从永久对象转移到临时对象,但是当我对临时对象执行操作时,永久对象不会改变?

4

3 回答 3

2

以下语句仅复制对永久对象的引用:

tmpObject = permObject

您需要一个永久网络对象的克隆,如下所示:

function clone(obj) {
  if (null == obj || "object" != typeof obj) return obj;

  var copy = obj.constructor();
  for (var attr in obj) {
    if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
  }

  return copy;
}


var permObject = {
data1: 1,
data2: 4,   
}
var tmpObject = clone(permObject);
tmpObject.data2 -= tmpObject.data1;
console.log(tmpObject.data2); //data2 = 3
console.log(permObject.data2); //data2 = 3

所以参考

于 2014-04-06T09:46:27.787 回答
2

你在第四行做的事情:

tmpObject = permObject;

是您创建了对同一对象的另一个引用,因此使用新引用,旧对象被更改。要修复它,请尝试克隆旧对象: 在 JavaScript 中深度克隆对象的最有效方法是什么?

于 2014-04-06T09:51:57.613 回答
0

Dr.Nefario 的链接是关于深克隆的,但在你的情况下,克隆是浅的还是深的并不重要,因为无论如何对象都是浅的。浅克隆更容易。

如果您使用的是下划线库,您可以使用defaults

tmpObject = _.defaults({}, permObject);
于 2014-04-06T10:20:14.207 回答