我将坐标存储为对象并复制了数据,因此在坐标更改之前我有一个副本。但问题是,当我更改坐标时,两个副本都会更改为新版本,而我会丢失原始版本。
所以我像这样创建它:
myObj = {};
myObj.position = {'x':12,'y':24};
myObj.startPos = myObj.position;
所以如果我改变 myObj.position
,我不要myObj.startPos
改变。防止这种情况发生的最简单方法是什么?
最佳答案
问题是分配对象不会复制它。相反,它是一种称为引用的东西,因此当你改变其他时,其他也会改变。您应该看到 this回答有关如何最有效地在 JavaScript 中复制对象的问题。
如果您使用任何库,例如 jQuery,您可以这样做
myObj.startPos = jQuery.extend({}, myObj.position);
下划线.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);
关于javascript - 将对象分配给另一个对象并保留原始数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27868690/