2010-10-28 23 views
3

我看在http://docs.jquery.com/Plugins/Authoring插件创作的文章,看到在默认设置和选项部分这个例子:jQuery插件选项:在this.each块之前还是之内扩展?

$.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

http://www.learningjquery.com/2007/10/a-plugin-development-pattern – Sarfraz 2010-10-28 19:18:11

回答

3

你是对的。

这对于jQuery集合中每个元素的settings对象没有任何意义。

另外你的|| {}是非常标准的,战斗证明和良好的。

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

是可以在这里进行的另一个优化。