代码之家  ›  专栏  ›  技术社区  ›  Razor

jQuery插件定义

  •  2
  • Razor  · 技术社区  · 14 年前

    关于“标准”jQuery插件定义,我似乎无法理解,而且似乎没有插件教程对此进行解释。
    我看到的大多数插件定义如下:

    (function($) {
        $.extend($.fn, {
            pluginName: function( options )
                ...
        });
    })(jQuery);
    

    现在,当我明白 function($) { ... } 部分(确保jquery与 $ ( ,结尾是 )(jQuery)

    编辑

    相同定义的变化:

    ;(function($) { // why is ; there?
    
    3 回复  |  直到 14 年前
        1
  •  6
  •   reko_t    14 年前

    它只是定义了一个匿名函数并立即调用它,您可以这样想:

    var f = function($) { /* Code goes here, can use $ */ };
    f(jQuery); // assings jQuery to $ parameter
    

    现在,如果你把这两条语句合并成一条,你会得到:

    (function($) { /* Code goes here */ })(jQuery);
    

    $

        2
  •  1
  •   balupton    14 年前

    包装行与创建匿名函数并调用它有关。jQuery被传递,然后别名为$,这样您的插件仍然可以在jQuery无冲突模式下工作($将不被定义)。匿名函数是这样的,我们的插件get是一个局部范围,这样我们就不会意外地定义任何全局变量,因为它们是坏的。

    ... });

    所有这些只需向jQuery对象原型添加一系列函数,例如,您可以调用$('#el').pluginName()。如果你的插件非常简单的话,这是很好的,但是它会变得很难维护,因为你的插件仍然是以过程的方式定义的,而不是面向对象的。

    更好的方法是这样:

    $.pluginName = {
        init: function(){
            var myPlugin = $.pluginName;
    
            // Attach jQuery Object Prototype (fn function)
            $.fn.pluginName = myPlugin.fn;
    
            // Attach DomReady
            $(function(){
                myPlugin.domReady();
            });
        }
        domReady: function(){},
        fn: function(){
            // your jQuery object function
        }
    });
    
    // Initialise our Plugin
    $.pluginName.init();
    

    这种方法还允许人们很容易地扩展你的插件,如果它在某些领域不足或修复代码自己不碰你的。例如,我可以通过以下操作覆盖您的fn函数:

    这对社区发展很有好处。我也喜欢它,因为它将jQuery对象原型中的内容保持在最低限度,从而减少了开销。

    我正在寻找的文章,我用了这方面的参考,并将张贴他们时准备好。

        3
  •  0
  •   dafi    14 年前