我正在尝试使用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

最佳答案

当隔离运行时,您的第二个代码片段按预期运行,并执行了obj4obj3的深层复制。

问题是,先前的代码片段已经将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' }
    
  • 09-07 20:58