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 中的第二个定义。
当我尝试扩展一个对象,传入一个完整的对象时,它似乎覆盖了所需的目标对象。但是,我可以单独扩展每个子对象,然后将它们传递进去,它就可以工作了。
$(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 中的第二个定义。