扩展方法可以描述如下:
$.extend(target, more1, more2, moreN);
wheretarget
将是使用该more1...N
顺序中的所有属性扩展的对象:
var target = {};
var more1 = {a: 1, b: 2};
var more2 = {b: -2, c: -3};
$.extend(target, more1, more2);
console.log(target); // {a: 1, b: -2, c: -3}
如您所见,目标对象将首先从 more1 接收属性,然后从 more2 接收属性。
至于您的情况,您可以使用所有这三种方法,但我建议您使用第二种方法,因为它使您可以覆盖默认值,因为它们可以使用:($.fn.plugin.defaults
)从全局范围访问。
$.fn.plugin.defaults
然后插件的用户可以在他正在使用的内容中为插件设置默认值:
$.fn.plugin.defaults.something = false;
并且没有使用该信息多次初始化插件:
// Top of file, config file or so:
$.fn.plugin.defaults.something = false;
// Somewhere else
$(a).plugin();
$(b).plugin();
// If this pattern is not used you will have to do:
$(a).plugin({something: false});
$(b).plugin({something: false});
$.extend(true, target, more);
一个侧面节点是,如果将 iftrue
作为第一个参数传递给$.extend
jQuery,将使得深度克隆比浅克隆更重要:
var target = { a: { a: 1 } };
var more = { a: { b: 2 } };
$.extend(target, more);
console.log(target) { a: { b: 2 } }
var target = { a: { a: 1 } };
var more = { a: { b: 2 } };
// V--- Note true here
$.extend(true, target, more);
console.log(target) { a: { a: 1, b: 2 } }
静态与动态默认值:
$.fn.plugin = function() {
return this.each(function() {
var options = $.extend({}, $.fn.plugin.defaults, {
images: $(this).children()
}, arguments[0]);
});
};
$.fn.plugin.defaults = { something: true, text: "Default Text" };