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

标签 javascript

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

所以我像这样创建它:

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/

相关文章:

javascript - 我可以触发 .ready() 的 Backbone 事件吗?

Javascript 连接/拆分替代语法

javascript - 如何不重复==很多次

php - 如何在浏览器中存储缓存?

javascript - 我有与此类似的代码,我想知道是否有办法使其简短

javascript - 如何使用 JQuery 1.3.2 使复选框选中?

javascript - 打开/关闭时更改 slicknav 中的标签

JavaScript:hasOwnProperty 与点语法

javascript - 他们如何在 javascript/jquery 中实现这种半透明叠加效果?

javascript - 如何在页面刷新/加载时刷新验证码图像?