我有两个对象,obj1和obj2。当用户点击按钮时,我想让一个具有与另一个相同的属性和值,所以我写下这一行:
main.obj1.data=$.extend({},main.someArray[0].data);
但现在更新main.obj1.data
会自动更新main.someArray[0].data
,反之亦然。我通过在该行代码之后立即检查console.logs是否为真来测试它。我认为这个命令会克隆对象但不会使它们成为同一对象的别名。我做错了什么?
在这个命令之前,我有一些杂乱的代码要排序...在那之前我可能在代码中添加了什么东西会导致$ .extend不再像我认为的那样工作?
答案 0 :(得分:1)
有两种方法可以解决这个问题
1.
main.obj1.data={};
$.extend(main.obj1.data,main.someArray[0].data);
2.
main.obj1.data=$.extend(true,{},main.someArray[0].data)
实际上两者都在做同样的事情 您可以阅读有关$.extend()
的更多信息答案 1 :(得分:0)
jQuery扩展复制值,以便复制的对象不应链接到初始对象。您可以在此jsfiddle中验证:http://jsfiddle.net/cFtA7/(打开控制台并运行脚本)。
$.extend(true,{},main.someArray[0].data)
中的第一个参数用于深层复制您的对象。如果您的对象有多个级别,请使用此参数,否则,不需要它。
我猜,但是你的扩展代码是否可能在每次更新其中一个值时调用的绑定对象上?