Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 编写jQuery插件的最佳方法-如果有这种方法?_Javascript_Jquery - Fatal编程技术网

Javascript 编写jQuery插件的最佳方法-如果有这种方法?

Javascript 编写jQuery插件的最佳方法-如果有这种方法?,javascript,jquery,Javascript,Jquery,有相当多的方法来编写插件,例如,我最近看到的是以下代码模式,Doug Neiner使用了它 那么,有人能告诉我使用上面的模式而不是下面的模式的好处吗。我看不出为jQuery堆栈中的每个元素调用$.extend函数有什么意义(见上文),下面的示例只执行一次,然后在堆栈上运行 为了测试它,我创建了两个插件,使用这两种模式,将样式应用于大约5000 li元素,下面的代码大约需要1秒,而上面的模式大约需要1.3秒 (function($){ $.fn.formatLink = function(o

有相当多的方法来编写插件,例如,我最近看到的是以下代码模式,Doug Neiner使用了它

那么,有人能告诉我使用上面的模式而不是下面的模式的好处吗。我看不出为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);

我知道Doug在编写Slider时使用了这种格式,我认为这样做是为了公开内部函数,并在插件初始化后更容易调用它们。例如,在任意滑块中,您可以通过两种方式转到特定的滑块:

  • 使用
    $('.anythingSlider')。anythingSlider(2)用于外部链接。但是这个方法实际上使用下面的方法来执行操作
  • 第二种方法显示如何通过数据访问子函数,如下所示:
    $('.anythingSlider').data('anythingSlider').gotoPage(2)

  • 也许有更简单/更好的方法,但我认为作者对这种方法有最好的解释/推理。所以@Doug Neiner(如果可行的话),给我们一个想法:)

    你看过jQueryUI的小部件工厂吗@彼得森——我快速浏览了一下这个链接,但并没有真正看到它与我所问的有什么关系?有什么我遗漏的吗?它讨论了widget开发。你能帮我一点忙吗?告诉我我应该看什么。也许他指的是这部分的文档:@Petersen&Fudgey-谢谢你们。我花了更多的时间阅读,但最终还是到达了目的地。谢谢你的帮助。你完全正确。我在他的网站上找到了这个关于自定义事件的示例,在阅读了他的代码后,我了解了他为什么使用他所使用的模式。这完全有道理。我想我的问题的答案是使用插件模式,它与我正在做的任务最相关。我还发现这非常有用
    (function($){
       $.fn.formatLink = function(options){
           var options = $.extend({}, $.fn.formatLink.defaultOptions, options || {});
    
           return this.each(function(){
            //code here
           });
        });
    
    $.fn.formatLink.defaultOptions ={}
    })(jQuery);