将对象分配给另一个对象并保留原始数据?

时间:2015-01-09 20:27:38

标签: javascript

我作为一个对象存储并且复制了数据,所以在坐标改变之前我有一个副本。但问题是,当我更改坐标时,两个副本都会更改为新版本而我会丢失原始版本。

所以我这样创建:

myObj          = {};
myObj.position = {'x':12,'y':24};
myObj.startPos = myObj.position;

因此,如果我更改myObj.position,我不希望myObj.startPos更改。防止这种情况发生的最简单方法是什么?

1 个答案:

答案 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);