有相当多的方法来编写插件,例如here's a nice example,我最近看到的是下面的代码模式,Doug Neiner here使用了它;
(function($){
   $.formatLink = function(el, options){
    var base = this;
    base.$el = $(el);
    base.el = el;
    base.$el.data("formatLink", base);
    base.init = function(){
       base.options = $.extend({}, $.formatLink.defaultOptions, options); 
       //code here
    }                 
    base.init();
   };
   $.formatLink.defaultOptions = { };
   $.fn.formatLink = function(options){
      return this.each(function(){
       (new $.formatLink(this, options));
      });
   };
})(jQuery);那么,谁能告诉我使用上面的模式而不是下面的模式的好处。我看不出为jQuery堆栈(上面)中的每个元素调用$.extend函数有什么意义,下面的示例只做了一次,然后在堆栈上工作。
为了测试它,我创建了两个插件,使用两种模式,将样式应用到大约5000个li元素,下面的代码花了大约1秒,而上面的模式花了大约1.3秒。
(function($){
   $.fn.formatLink = function(options){
       var options = $.extend({}, $.fn.formatLink.defaultOptions, options || {});
       return this.each(function(){
        //code here
       });
    });
$.fn.formatLink.defaultOptions ={}
})(jQuery);发布于 2010-06-02 22:28:13
我知道Doug在编写任何Slider时都使用这种格式,我认为这样做是为了公开内部函数,以便在初始化插件后更容易调用它们。例如,在Anything Slider中,您可以通过两种方式转到特定幻灯片:
$('.anythingSlider').anythingSlider(2);。但是这个方法实际上使用了下面的方法来执行操作。$('.anythingSlider').data('AnythingSlider').gotoPage(2);是另一种方法,它展示了如何通过数据访问子函数:
也许还有更简单/更好的方法,但我认为作者对这种方法有最好的解释/推理。所以@Doug Neiner (如果可行),给我们一个想法:)
https://stackoverflow.com/questions/2957327
复制相似问题