jQuery插件选项:在this.each块之前或之内扩展?

时间:2010-10-28 19:13:05

标签: jquery

我正在查看http://docs.jquery.com/Plugins/Authoring上的插件编写文章,并在默认值和选项部分中看到了此示例:

$.fn.tooltip = function( options ) {  
var settings = {
  'location'         : 'top',
  'background-color' : 'blue'
};
return this.each(function() {        
  // If options exist, lets merge them
  // with our default settings
  if ( options ) { 
    $.extend( settings, options );
  }

我不完全理解为什么.extend调用在this.each块内?我的第一个直觉就是把它写成:

$.fn.tooltip = function( options ) {  
var settings = {
  'location'         : 'top',
  'background-color' : 'blue'
};
$.extend( settings, options || {} );

return this.each(function() { 

所以我将.extend调用移到了返回上方(并用|| {}替换了丑陋的调用 - 我认为这有意义吗?)。

有什么我没看到的吗?任何奇怪的关闭相关的东西可能吗?如:在全局修改设置与仅在该呼叫上修改? (编辑:显然我不是 - http://jsfiddle.net/fVSDH/

1 个答案:

答案 0 :(得分:3)

你是对的。

为jQuery集合中的每个元素扩展settings对象没有任何意义。

此外,您的|| {}非常标准,经过实战验证并且很好。

var settings = $.extend({
   'location':          'top',
   'background-color':  'blue'
}, options || {});

可以在这里进行另一项优化。