2017-08-10 54 views
0

我很困惑如何最好地创建一个我正在处理的JQuery插件。创建一个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)); 

我该假设,如果在第二个方式创建的插件,那么违约将无法被重写?由于插件对象首先必须实例化?

如果是这样的话,为什么它真的很重要?因为它将在某个时刻被实例化...

任何人都可以在他们的观点上呐喊吗?

+1

第一种方法使全局可访问的默认选项。这是唯一的区别。通常,这不起任何作用,因为您将这些选项与传入插件初始程序的选项一起扩展。 –

回答

1

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

第二个创建默认的一个副本每个插件的实例,并仅在该插件的实例访问 - 因此没有以任何有意义的方式重写。

意见 - javascript是一种开放式语言,您可以通过多种方式实现。当一个图书馆建议你以特定的方式做某件事时,它通常更愿意接受建议。

+0

对,我明白了。全局默认值与每个受影响的选择器实例。而且我知道我应该遵循他们的建议(并且将会/我),但是我正在努力查看这两种实现之间的差异。谢谢。 :) –