我正在尝试使用jQuery $ .extend合并两个对象。
使用以下代码,我试图发出警报(“球–树桩–裁判”)。但是当前输出是(“未定义–树桩–裁判”)。它无法实现深度(递归)副本。我们该如何纠正?
$(document).ready(function () {
debugger;
//$.extend
var obj3 = { throwable: { text1: 'Ball' }, text3: 'Umpire' };
var obj4 = { throwable: { text4: 'Bat' }, text2: 'Stump' }
//Simple Copy
var result1 = $.extend(obj3, obj4);
//alert(result1.throwable.text4 + " - " + result1.text2 + " - " + result1.text3);
//Deep Copy
//First parameter is passed as Boolean true to accomplish deep (recursive) copy
var result2 = $.extend(true, obj3, obj4);
alert(result2.throwable.text1 + " - " + result2.text2 + " - " + result2.text3);
});
编辑:我提到
(Deep) copying an array using jQuery
最佳答案
当隔离运行时,您的第二个代码片段按预期运行,并执行了obj4
到obj3
的深层复制。
问题是,先前的代码片段已经将obj4
的浅拷贝到obj3
中,在此过程中用throwable
完全覆盖了它的obj4
成员。因此,运行该代码后,throwable.text1
中不再存在obj3
。
obj3
是:{ throwable: { text1: 'Ball' }, text3: 'Umpire' }
obj3
变为:{ throwable: { text4: 'Bat' }, text3: 'Umpire', text2: 'Slump' }
obj3
仍然是:{ throwable: { text4: 'Bat' }, text3: 'Umpire', text2: 'Slump' }