$ .EXTEND()不合并选项



我有一个带有

等选项的插件
$.growl.default_options = {
    allow_dismiss: true,
    position: {
        from: "top",
        align: "right"
    },
    offset: 20,
    spacing: 10,
    z_index: 1031,
    fade_in: 400,
    delay: 5000,
    template: {
        icon_type: 'class',
        container: '<div class="col-xs-10 col-sm-10 col-md-3 alert">',
        dismiss: '<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>',
        title: '<strong>',
        title_divider: '',
        message: ''
    }
});

当我使用以下选项调用程序

$.growl("I am a Message!", {
    position: {
        align: 'left'
    },
    template: {
        container: '<div class="col-xs-10 col-sm-10 col-md-3 alert">'
    }
});

在插件中我执行以下

options = $.extend({}, $.growl.default_options, options);

options

$.growl.default_options = {
    allow_dismiss: true,
    position: {
        align: "right"
    },
    offset: 20,
    spacing: 10,
    z_index: 1031,
    fade_in: 400,
    delay: 5000,
    template: {
        container: '<div class="col-xs-10 col-sm-10 col-md-3 alert">'
    }
});

为什么template只有一个变量?

您想要一个深(递归)扩展:

options = $.extend(true, {}, $.growl.default_options, options);

来自文档:

$ .EXTEND()执行的合并默认情况下不是递归的;如果一个 第一个对象的属性本身就是一个对象或数组,它将是 在第二个中完全被带有相同键的属性覆盖 或后续对象。值不合并。可以看出 下面的示例通过检查香蕉的价值。但是,通过 传递第一个函数参数的true,对象将是 递归合并。

最新更新