Javascript jquery插件选项数组,防止数组覆盖

Javascript jquery插件选项数组,防止数组覆盖,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,我正在为jquery编写一个插件,我使用了这样的代码来允许用户为插件指定选项: var settings = $.extend({ url : 'error.json', slotWidth : 100, slotHeight : 100, gridWidth : 6, gridHeight : 3, basketLayers : 1, layerDirection : "vertical", class

我正在为jquery编写一个插件,我使用了这样的代码来允许用户为插件指定选项:

var settings = $.extend({
    url     : 'error.json',
    slotWidth   : 100,
    slotHeight  : 100,
    gridWidth   : 6,
    gridHeight  : 3,
    basketLayers    : 1,
    layerDirection  : "vertical",
    classNames  : {
            productPanelParent  : '.products-panel-parent',
            productPanelTabs    : '.products-panel-tabs',
            productPanelGroup   : '.products-panel-container',
            productPanel    : '.products-panel',
            productBasketParent : '.products-basket-parent',
            productBasketGroup  : '.products-basket-container',
            productBasket   : '.products-basket',
            productBasketMenu   : '.products-basket-menu',
            basketSlot      : '.basket-slot',
            basketSlotFull  : '.basket-slot-full',
            basketSlotHelper    : '.basket-slot-highlight',
            product     : '.product',
            resetBasket     : '.clearBasket',
            resetLayer      : '.clearLayer',
            viewLayer       : '.viewLayer'
          }
}, options);
问题是,当我试图重写其中一个类名时,如果没有指定属性,整个数组都会被
null
值覆盖

举个例子,我会这样做:

$('#somediv').myPlugin({
    gridWidth : 4,
    gridHeight : 2,
    classNames : {
        productBasket : '.small_basket'
    }
});
并且
settings.classNames.productBasket
属性将是正确的值,但是settings.classNames中的所有内容都将为null

我该如何避免这种情况?
(没有编写自定义函数来处理数组中的默认值吗?

的第一个参数可以是布尔值。如果是
true
,则扩展名为“deep”(合并是递归进行的):

从文档中:

默认情况下,
$.extend()
执行的合并不是递归的;如果 第一个对象的属性本身就是一个对象或数组,它将 被第二个中具有相同键的属性完全覆盖 对象这些值未合并。。。但是,通过为 第一个函数参数,对象将递归合并

var settings = $.extend(true, defaults, options);