jquery的两种扩展方式有什么不同?

jquery的两种扩展方式有什么不同?,jquery,jquery-plugins,extend,Jquery,Jquery Plugins,Extend,我正在编写一些jquery插件,我扩展了这些插件,但我不知道为什么: 方法1 (function($){ $.fn.myplugin = function() {} })(jQuery); $.extend({myplugin : $.fn.myplugin}); 方法2 (function($){ $.extend({ myplugin: function() {} }) })(jQuery); 对于#1,我可以调用$.myplugin().myp

我正在编写一些jquery插件,我扩展了这些插件,但我不知道为什么:

方法1

(function($){
    $.fn.myplugin = function() {}
})(jQuery);

$.extend({myplugin : $.fn.myplugin});
方法2

(function($){
    $.extend({
        myplugin: function() {}
    })
})(jQuery);
对于#1,我可以调用$.myplugin().myplugin2().myplugin3()

但是使用#2时,不能使用$.myplugin().myplugin2();它显示myplugin2不是有效的函数


基本上我想写在#2中,因为我不需要申报

$.extend({
    myplugin : $.fn.myplugin,
    myplugin2 : $.fn.myplugin2,
    .....});

对于每个插件。有人能帮我吗?

在这两种情况下,您都将函数添加到全局jQuery对象中,这样您就可以调用
$.pluginName

#1还将插件添加到所有jQuery元素对象中,即调用
$
函数时得到的对象:
$(“#选择器”)

您的插件可能返回jQuery元素对象。因此,首先使用
$.pluginName
,然后在后面的代码中调用
$.fn.pluginName
。您不能用#2链接调用,因为
$.fn.pluginName
未定义

当您知道
$.fn
$.prototype
的别名时,这将更有意义。(原型函数是
$()
的所有返回值的成员-在后台使用
new
关键字。)


您可以使用所有插件创建一个对象,以简化代码:

var plugins = {
    myPlugin: function(){},
    myPlugin2: function(){}
}

$.extend($, plugins);
$.extend($.fn, plugins);

$.fn.myplugin=function(){}
允许您对jquery对象调用函数,如下所示:

$("something").myplugin()
$.myplugin()
何处为

$.extend({
    myplugin: function() {}
})
使您可以这样调用函数:

$("something").myplugin()
$.myplugin()

在第一个示例中,您正在执行这两个操作。第二个只做第二个。

IIRC,你应该用#2调用
$.myplugin(“myplugin2”).myplugin3();或者一些解决方案来编写#1,但为所有插件延长1次您是否需要
$.myPlugin
版本?你能改为使用
$(“”).myPlugin
只扩展
$.fn
吗?非常感谢你的澄清,但是你的代码不是我需要的最好的主意,如果使用它,我必须为每个插件键入2行。我只想写插件,然后它会自动扩展,比如#2ahh,我没有仔细阅读,也许你的建议现在更好,非常感谢