我extend在插件中使用jQuery 来覆盖默认参数.但是,我有一个问题.
这是我的默认设置数组:
slider.settings = {
background: {
animation : {
direction : 'horizontal',
increment : 15 //can be any number
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想覆盖direction参数.这是我将使用合并的数组extend:
settingsToOverwrite = {
background:{
animation:{
direction:'vertical'
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我合并了两个:
slider.settings = $.extend(slider.settings, options)
Run Code Online (Sandbox Code Playgroud)
我可以看到方向值已更新.但是,增量不再存在.我知道为了避免这个问题,我只能在第一级设置参数,但我看到了更多的代码清晰度.有办法吗?如果没有,我会将所有内容改为只有一层深.
Jon*_*ski 12
默认情况下,jQuery.extend()仅比较直接属性,执行" 浅合并".由于两个对象都有background,它只需background从第二个对象中获取整个对象.
但是,传递一个true作为第一个参数,jQuery.extend()并将执行" 深度合并".
slider.settings = $.extend(true, slider.settings, options);
Run Code Online (Sandbox Code Playgroud)
此外,由于第一个Object是target和将被修改和return'd,你可以slider.settings只用以下更新:
$.extend(true, slider.settings, options);
Run Code Online (Sandbox Code Playgroud)
而且,如果你想new Object从合并中获得一个,你必须自己创建它:
slider.settings = $.extend(true, {}, slider.settings, options);
Run Code Online (Sandbox Code Playgroud)