我在插件中使用jQuery扩展来覆盖默认参数.但是,我有一个问题.
这是我的默认设置数组:
slider.settings = { background: { animation : { direction : 'horizontal',increment : 15 //can be any number } } }
现在,我想覆盖direction参数.这是我将使用extend合并的数组:
settingsToOverwrite = { background:{ animation:{ direction:'vertical' } } }
现在,我合并了两个:
slider.settings = $.extend(slider.settings,options)
我可以看到方向值已更新.但是,增量不再存在.我知道为了避免这个问题,我只能在第一级设置参数,但我看到了更多的代码清晰度.有办法吗?如果没有,我会将所有内容改为只有一层深.
解决方法
默认情况下,jQuery.extend()仅比较直接属性,执行“浅合并”.由于两个对象都具有背景,因此它只需要从第二个对象获取整个背景.
但是,pass a true
作为第一个参数,jQuery.extend()将执行“深度合并”.
slider.settings = $.extend(true,slider.settings,options);
此外,由于第一个对象是目标并且将被修改并返回,因此您可以使用以下命令更新slider.settings:
$.extend(true,options);
而且,如果你想从合并中获得一个新的对象,你必须自己创建它:
slider.settings = $.extend(true,{},options);