我正在研究为 jQuery 编写插件,并且试图了解 $.f 和 $.fn.f 之间的区别
我见过插件作者同时使用两者,或者有时分配 $.f = $.fn.f
有人可以向我解释一下,推理,好处等吗?
最佳答案
查看 jQuery 源代码将把事情弄清楚。顺便说一句,jQuery
和 $
引用同一个对象,这就是 jQuery 对象的定义方式:
var jQuery = function( selector, context ) {
return new jQuery.fn.init( selector, context );
}
jQuery
是一个函数,在 Javascript 中,函数也是 Function
类型的对象.所以jQuery.f
或 $.f
附上f
到 jQuery Function
对象,或者如果您愿意,可以将其称为 jQuery 类。如果您查看 jQuery 的源代码,您会看到
jQuery.prototype
已分配给 jQuery.fn
jQuery.fn = jQuery.prototype
因此,每当您将方法(或属性)附加到
jQuery.fn
,如 jQuery.fn.f = ..
, 或 $.fn.f = ..
, 或 jQuery.prototype.f = ..
, 或 $.prototype.f = ..
,该方法将可用于此 jQuery 类的所有实例(同样,Javascript 中没有类,但它可能有助于理解)。每当您调用
jQuery()
函数,如 jQuery("#someID")
,在这一行创建一个新的 jQuery 实例:return new jQuery.fn.init( selector, context );
这个实例有我们附加到原型(prototype)的所有方法,但没有直接附加到
Function
的方法。目的。如果您尝试调用未在正确位置定义的函数,则会出现异常。
$.doNothing = function() {
// oh noez, i do nuttin
}
// does exactly as advertised, nothing
$.doNothing();
var jQueryEnhancedObjectOnSteroids = $("body");
// Uncaught TypeError: Object #<an Object> has no method 'doNothing'
jQueryEnhancedObjectOnSteroids.doNothing();
哦,最后把长线剪短并回答你的问题 - 做
$.f = $.fn.f
允许您将该函数用作插件或实用方法(在 jquery 术语中)。
关于jquery-plugins - 在 jQuery 中,$.myFunction 和 $.fn.myFunction 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2398007/