jQuery 扩展嵌套对象

jQuery extend nested object

当我尝试扩展一个对象,传入一个完整的对象时,它似乎覆盖了所需的目标对象。但是,我可以单独扩展每个子对象,然后将它们传递进去,它就可以工作了。

$(function() {
    window.test = {};
    $.extend(window.test, {
        init: function(opts1, opts2) {
            //method 1, completely overwrites            
            this.options = $.extend({}, this.settings, {opts1: opts1, opts2: opts2});

            //method 2, works
            this.a = $.extend({}, this.settings.opts1, opts1);
            this.b = $.extend({}, this.settings.opts2, opts2);
            this.options2 = $.extend({}, this.settings, {opts1: this.a, opts2: this.b});

            console.log(this.options, this.options2);
        },
        settings: {
            opts1: {
                a: 'hello',
                b: 'hi',
                e: 'this still here?'
            },
            opts2: {
                c: 'yo',
                d: 'wassup'
            }
        }
    });
    test.init({ a: 'hello2', b: 'hello3' });
});

我的问题是是否有办法利用第一种方法(1 行,简单方法)来实现第二种方法(单个子对象)的结果。

此外,这里有一个JSFiddle

您可以通过将 true 作为第一个参数传递给 $.extend 来进行深度复制扩展。我相信这就是你在这里问的。

this.options = $.extend(true, this.settings, {opts1: opts1, opts2: opts2});

参见 documentation 中的第二个定义。