Javascript jquery插件选项数组,防止数组覆盖
我正在为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
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);