Javascript jquery插件选项未正确扩展和覆盖

Javascript jquery插件选项未正确扩展和覆盖,javascript,jquery,Javascript,Jquery,我对jquery插件和选项的编写有一个奇怪的问题 如果我像这样设置插件,它 如果我添加了一个需要覆盖的额外选项,则 通过该赋值,您将覆盖插件中的整个facebook对象,使其仅包含id变量 您最好将facebook id作为单独的属性来覆盖: ... facebook: { like_large: '<div class="fb-like" data-href="{url}" data-send="false" data-layout="box_count" data-wi

我对jquery插件和选项的编写有一个奇怪的问题

  • 如果我像这样设置插件,它

  • 如果我添加了一个需要覆盖的额外选项,则


  • 通过该赋值,您将覆盖插件中的整个
    facebook
    对象,使其仅包含
    id
    变量

    您最好将facebook id作为单独的属性来覆盖:

    ...
    facebook:   {
        like_large: '<div class="fb-like" data-href="{url}" data-send="false" data-layout="box_count" data-width="120" data-show-faces="false"></div>',
        like_small: '<div class="fb-like" data-href="{url}" data-send="false" data-layout="button_count" data-width="120" data-height="21" data-show-faces="false" data-colorscheme="light"></div>',
        share: '<a name="fb_share" type="box_count" share_url="{url}" href="http://www.facebook.com/sharer.php?u={url}&t={title}">Share</a>',                   
    },
    facebook-id: 1000000, 
    ...
    
    。。。
    facebook:{
    就像你说的那样:,
    就像你说的那样:,
    共享:“”,
    },
    facebook id:1000000,
    ...
    
    默认情况下,替换整个属性。因此,如果默认设置有以下内容:

    {
        …
        facebook: {
            like_large: '<div class="fb-like" data-href="{url}" data-send="false" data-layout="box_count" data-width="120" data-show-faces="false"></div>',
            like_small: '<div class="fb-like" data-href="{url}" data-send="false" data-layout="button_count" data-width="120" data-height="21" data-show-faces="false" data-colorscheme="light"></div>',
            share: '<a name="fb_share" type="box_count" share_url="{url}" href="http://www.facebook.com/sharer.php?u={url}&t={title}">Share</a>',
            id: 195838043798363
        },
        …
    }
    
    整个
    facebook
    对象将替换为
    {id:195838043798363}

    如果您将
    true
    作为其第一个参数传递,那么它将支持执行您试图让它执行的操作。更改此行:

    var opt = $.extend({},defaults, options);
    
    为此:

    var opt = $.extend(true, {},defaults, options);
    

    应该让它做你想让它做的事。

    @Jivings谢谢你的帮助!事实上,我更喜欢你的回答。虽然我的是一个简单的修复,你的使插件的设计更好。
    {
        …
        facebook: {
            id: 195838043798363
        }     
        …
    }
    
    var opt = $.extend({},defaults, options);
    
    var opt = $.extend(true, {},defaults, options);