首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$.extend()不合并选项

$.extend()不合并选项
EN

Stack Overflow用户
提问于 2014-01-22 13:44:32
回答 1查看 55关注 0票数 1

我有一个插件,它有一些选项,例如

代码语言:javascript
复制
$.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: ''
    }
});

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

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

在插件中,我执行以下操作

代码语言:javascript
复制
options = $.extend({}, $.growl.default_options, options);

而且比options更重要

代码语言:javascript
复制
$.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只有一个变量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-22 13:46:12

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

代码语言:javascript
复制
options = $.extend(true, {}, $.growl.default_options, options);

来自the documentation

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21284614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档