jquery的两种扩展方式有什么不同?
我正在编写一些jquery插件,我扩展了这些插件,但我不知道为什么: 方法1jquery的两种扩展方式有什么不同?,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
(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,我没有仔细阅读,也许你的建议现在更好,非常感谢