jquery插件选项数组,防止数组覆盖
jquery plugin options array, preventing array overwrite
我正在为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中。
我该如何解决这个问题
(不编写自定义函数来处理数组中的默认值?)
jQuery.extend()
的第一个参数可以是布尔值。如果是true
,则扩展为"深度"(递归合并):
var settings = $.extend(true, defaults, options);
来自文档:
默认情况下,
$.extend()
执行的合并不是递归的;如果第一个对象的属性本身就是一个对象或数组,它将被第二个键相同的属性完全覆盖对象值未合并。。。但是,通过为第一个函数参数,对象将被递归合并。
相关文章:
- 为什么用javascript覆盖2D数组的元素
- 如何在mongodb(mongose)中覆盖子文档的数组属性
- Javascript数组项被覆盖
- 无限多维数组,其中一个值被覆盖
- 如何覆盖 javascript 对象数组中的元素
- 阻止数组被覆盖或多次调用
- jquery插件选项数组,防止数组覆盖
- 按数组覆盖相似的条目
- 我的数组中的每个元素都被最后一个元素推入覆盖
- 在javascript中,如何将相同的对象两次推送到一个数组中,并进行一些修改而不覆盖数组
- Javascript:被推入数组的对象相互覆盖
- 覆盖原型继承中的数组
- 新数组覆盖全局数组
- Javascript将Object推送到全局数组会覆盖以前的值
- 我无法在javascript中定义一个新对象,并使用输入将其推入数组,而不覆盖它或导致错误
- 将多个对象推入JavaScript数组,但会导致对象覆盖
- 将json数组覆盖到js对象
- Javascript -数组覆盖
- 为什么推对象到数组覆盖/更新现有的和类似的对象
- 数组覆盖(Javascript)