使用默认值创建 jquery 插件作为插件的扩展有什么区别?

What is the difference between creating a jquery plugin with the default values as an extension of the plugin?

我对如何最好地创建我正在使用的 JQuery 插件感到困惑。

我的基本布局是:

// Create Closure.
(function($) {

  // Plugin definition.
  $.fn.myPlugin = function(options) {

    var settings = $.extend(true, {}, $.fn.myPlugin.defaults, options);

    // Private:
    var privateVar = 'private';
    var privateFunction = function() {
      alert('hidden');
    }

    // Public:
    this.publicVar = 'public';
    this.publicFunction = function() {
      alert('visible');
    }

    return this;

  };

  // Plugin defaults – added as a property on our plugin function.
  $.fn.myPlugin.defaults = {
      foreground: "red",
      background: "yellow"
  };

// End Closure.
}(jQuery));

但我想知道为什么 JQuery 文档 (https://learn.jquery.com/plugins/advanced-plugin-concepts/) 建议将默认值设置为 属性,定义在 外部 插件主体,而不是内部。所以,我认为它可以实现的方式是:

// Create Closure.
(function($) {

  // Plugin definition.
  $.fn.myPlugin = function(options) {

    // Plugin defaults – added as a property inside the plugin function.
    this.defaults = {
      foreground: "red",
      background: "yellow"
    };

    var settings = $.extend(true, {}, this.defaults, options);

    // Private:
    var privateVar = 'private';
    var privateFunction = function() {
      alert('hidden');
    }

    // Public:
    this.publicVar = 'public';
    this.publicFunction = function() {
      alert('visible');
    }

    return this;

  };

// End Closure.
}(jQuery));

我是否假设如果插件以第二种方式创建,那么默认设置将无法被覆盖?由于插件对象首先必须被实例化?

如果是这样,那为什么真的很重要?因为无论如何它都会在某个时候被实例化...

有人能谈谈他们对此的看法吗?

第一种方法创建一个默认值的静态版本,它是全局可访问的(用于覆盖等)。

第二个创建一个默认值副本每个插件实例并且只能在插件实例上访问 - 因此不能以任何有意义的方式覆盖。

意见 - javascript 是一种非常开放的语言,您可以通过多种方式实现事物。当图书馆建议您以特定方式做某事时,通常最好采纳建议。