我正在查看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/

最佳答案

你是对的。

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

另外,您的|| {}是相当标准的,经过战斗验证的并且很好。

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


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

10-07 21:47