使用通用函数扩展jquery
我正在为我的网站使用jquery编写一个通用函数,该函数将用于显示成功/错误消息的整个站点。我决定让它成为一个插件。使用通用函数扩展jquery
插件的简单形式下面给出:
; (function ($) {
jQuery.FlashMessage=function(msg){
alert(msg);
}
})(jQuery);
我想知道它是否是一个很好的做法在jQuery的命名空间中定义的插件或者它应该在$ .fn.XXXX定义..或者我是否过度,并没有关系。
您添加这些功能jQuery.fn
应在选定的元素上运行,例如$('div').yourFunction()
。
如果你想要一个“通用”功能,如$.ajax()
,那么你应该把它添加到jQuery对象,就像你已经做的那样。但我会用$
里面的功能:
(function ($) {
$.FlashMessage=function(msg){
alert(msg);
}
})(jQuery);
所以这取决于你想要什么样的功能。
但是,这种模式不仅仅将jQuery对象用作命名空间吗?在这种情况下,我宁愿定义我自己的名称空间对象,以避免与jQuery内置函数发生冲突。 – 2011-03-10 18:43:51
jQuery.fn
相当于jQuery.prototype
与jQuery.fn.FlashMessage
你可以做
jQuery.fn.FlashMessage=function(){
return this.each(function(){
//do some thing
});
});
//use like this, your chaining is secured
jQuery('#someElement').FlashMessage().DoSomeThingElse().SomethingMore();
如果你担心被修改多为什么要使用jQuery.FlashMessage
只有一个元素,做到像myNameSpace.FlashMessage
不,“jQuery.fn”不等同于“jQuery.prototype”。但'jQuery.fn'是'jQuery(selector)'返回的对象的原型。 – gilly3 2011-03-10 18:46:59
http://*.com/questions/1755080/why-jquery-do-this-jquery-fn-init-prototype-jquery-fn – 2011-03-10 18:50:58
@gilly是的,它是。试试'jQuery.fn === jQuery.prototype'。它的评估为真。 'fn'被用作'prototype'的缩写名称。 – 2011-03-10 18:52:40
通常插件在fn namspace上返回一个jQuery对象来保持链接性。它们也适用于jQuery.prototype
,所有jQuery对象都可以调用它。
退房这个网页,插件开发一个很好的概述:http://docs.jquery.com/Plugins/Authoring
但是你这样做,'function($)'的意义在于'$'是传递给底部匿名闭包的'jQuery'参数的内部作用域引用。因此,你应该在闭包中使用'''而不是'jQuery'。 – Alnitak 2011-03-10 18:30:31
看来你不明白'$ .foo'和'$ .fn.foo'之间的区别。 – 2011-03-10 18:44:55
@Sime是的,这正是他在这里问的原因! – Alnitak 2011-03-10 19:27:31