将对象分配给另一个对象并保留原始数据
Assigned object to another object and preserve original data?
我坐标存储为对象并复制了数据,因此在坐标更改之前我有一个副本。但问题是,当我更改坐标时,两个副本都更改为新版本,并且我丢失了原始版本。
所以我像这样创建它:
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);
相关文章:
- 我们可以用参数对象集合而不是原始数据来调用JavaScript collection.reduce()方法吗
- 从jquery对话框恢复原始数据,脚本不起作用
- 将作用域绑定到事件处理程序,但保留原始参数
- Javascript检查表单的当前数据是否等于其原始数据
- DimpleJS-在getTooltipText回调中获取原始数据
- 如何使用bluebird将原始数据与Promise.map的响应一起传递
- JavaScript中的“符号”原始数据类型是什么?
- SlickGrid:使用DataView而不是原始数据的简单示例
- ngTagsInput:保留原始数据提供者的数据格式
- Javascript - 将原始图像放入另一个容器后保留原始图像
- 使用 .models canjs 进行转换时无法获取任何原始数据
- 将对象分配给另一个对象并保留原始数据
- 如果我创建右键单击菜单,如何保留原始复制和粘贴功能
- jquery 中的数组即使在 ajax 提交后也会保留旧数据
- 车把:在保留原始排序索引的同时对列表进行排序
- 在 JavaScript 函数之后保留原始数组
- PHP 和 RegEx:在 XML 标记之间获取原始数据,即使整个 XML 似乎无效
- 如何将原始数据从控制器传递到 javascript
- 解析的 JSON 不等于原始数据
- 在表中追加文本,同时保留现有数据