jquery-plugins - 在 jQuery 中,$.myFunction 和 $.fn.myFunction 有什么区别?

标签 jquery-plugins

我正在研究为 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/

相关文章:

javascript - 更改图像大小时,JCrop 不保存选择

jquery - 在jquery中如何引用具有特定标题属性的div?

javascript - jQuery - 如果没有选项参数,回调失败

javascript - FullPage.JS 连续滚动

php - 如何将 jQuery 插件插入 PHP 代码?

css - 需要一个修改 CSS 的 jQuery 插件

jquery - 使用 Infinitescroll jQuery 插件操作时丢失变量

jQuery 步骤删除操作按钮

javascript - jQuery 代码触发两次

jquery-plugins - jquery isotope - 排序、布局和多个过滤器