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

Assigned object to another object and preserve original data?

本文关键字:保留 原始数据 一个对象 对象 分配      更新时间:2023-09-26

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

所以我像这样创建它:

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

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

问题是分配对象不会复制它。相反,它是称为参考的东西,当您更改其他原因时,其他也会更改。你应该看到这个关于如何在 JavaScript 中最有效地复制对象的答案。

如果你正在使用任何库,如jQuery,你可以做

myObj.startPos = jQuery.extend({}, myObj.position);

下划线.js

myObj.startPos = _.clone(myObj.position);

原型.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);