jQuery扩展会覆盖错误的值

Eti*_*oël 6 javascript jquery

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)

此外,由于第一个Objecttarget和将被修改和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)