jQuery.extend方法和开发中变量的复用

时间:2021-08-24 11:26:13

最近在用commonJS规范进行客户端开发,遇到如下问题:

一般一个模块内部可能会定义一系列变量或一系列相关变量,比如写了一个颜色选择弹框模块大概会有如下变量定义

var settings = {
//设置它是否绝对定位
position: {
//定位可以是绝对定位,可以是相对定位(需要有target),也可以是默认定位
type: "none",
top: 30,
left: 30,
//表示相对于目标的定位
target: "",
zindex: 0
},
//单击选择颜色结束是否关闭
isClose: true,
//表示颜色块单击(返回一个数组,表示选中的颜色和隐藏颜色)
onClick: function (colors) { },
onClose: function () { }
};

这些参数不经内部用到,而且需要提供调用初始化。你的实现代码可能是这样:

//修改默认配置
var setup = function (_settings) {
if (_settings) {
if (_settings.onClick && $.isFunction(_settings.onClick)) {
settings.onClick = _settings.onClick;
}
if (_settings.position) {
if (_settings.position.type)
settings.position.type = _settings.position.type;
if (_settings.position.top)
settings.position.top = _settings.position.top;
if (_settings.position.left)
settings.position.left = _settings.position.left;
if (_settings.position.target)
settings.position.target = _settings.position.target;
if (_settings.position.zindex)
settings.position.zindex = _settings.position.zindex;
}
if (_settings.isClose) {
settings.isClose = _settings.isClose;
}
}
};

但事实上我们可以利用jQuery的extend方法大大简化代码

以上代码可以简化为

//修改默认配置
var setup = function (_settings) {
$.extend(settings, _settings || {});//浅复制
    $.extend(true,settiings,_settings||{});
};

具体jQuery.extend用法可以参考

http://www.cnblogs.com/RascallySnake/archive/2010/05/07/1729563.html