我作为一个对象存储并且复制了数据,所以在坐标改变之前我有一个副本。但问题是,当我更改坐标时,两个副本都会更改为新版本而我会丢失原始版本。
所以我这样创建:
myObj = {};
myObj.position = {'x':12,'y':24};
myObj.startPos = myObj.position;
因此,如果我更改myObj.position
,我不希望myObj.startPos
更改。防止这种情况发生的最简单方法是什么?
答案 0 :(得分:1)
问题是分配对象不会复制它。相反,它是一种称为参考的东西,当你改变其他的时候,其他的改变也是如此。您应该看到有关如何最有效地在JavaScript中复制对象的this答案。
如果您使用任何库,例如jQuery,您可以
myObj.startPos = jQuery.extend({}, myObj.position);
Underscore.js
myObj.startPos = _.clone(myObj.position);
的Prototype.js
myObj.startPos = Object.clone(myObj.position);
纯JavaScript函数实现同样的事情
function clone(obj) {
if(obj == null || typeof(obj) != 'object')
return obj;
var temp = obj.constructor(); // changed
for(var key in obj) {
if(obj.hasOwnProperty(key)) {
temp[key] = clone(obj[key]);
}
}
return temp;
}
然后使用
myObj.startPos = clone(myObj.position);