jquery – $.functionName和$.fn.FunctionName之间的区别

前端之家收集整理的这篇文章主要介绍了jquery – $.functionName和$.fn.FunctionName之间的区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在jQuery中,我已经看到了以下两种定义jQuery函数方法
$.fn.CustomAlert = function() {
  alert('boo!');
};

$.CustomAlert = function() {
  alert('boo!');
};

我明白他们是附加到jQuery对象(或$),但两者之间有什么区别?什么时候应该使用一个或另一个?

谢谢。

解决方法

我确信这个问题已经被问过好几次了,但是我找不到链接

$ .fn指向jQuery.prototype。您添加的任何方法属性可用于所有jQuery包装对象的实例。

$ .something将一个属性函数添加到jQuery对象本身。

当您处理页面上的DOM元素时,使用第一个形式$ .fn.something,并且插件会对元素执行某些操作。当插件与DOM元素无关时,请使用$ .something的其他形式。

例如,如果你有一个记录器功能,那么在DOM元素中使用它并不重要:

$("p > span").log();

对于这种情况,您只需将日志方法添加到jQuery对象iself:

jQuery.log = function(message) {
    // log somewhere
};

$.log("much better");

但是,当处理元素时,您将要使用其他形式。例如,如果你有一个图形插件(plotGraph),它从< table>并生成一个图形 – 您将使用$ .fn。*表单。

$.fn.plotGraph = function() {
    // read the table data and generate a graph
};

$("#soMetable").plotGraph();

在相关的注释中,假设你有一个插件,可以使用元素或独立的,你想以$ .myPlugin或$(“< selector>”)的形式访问myPlugin(),你可以重复使用两者的功能

假设我们需要一个自定义警报,其中每个警报消息前面加上日期。当用作独立功能时,我们将其作为参数传递给消息,并且当与元素一起使用时,它将使用元素的文本作为消息:

(function($) {
    function myAlert(message) {
        alert(new Date().toUTCString() + " - " + message);
    }

    $.myAlert = myAlert;

    $.fn.myAlert = function() {
        return this.each(function() {
            myAlert($(this).text());
        });
    };
})(jQuery);

它被包装在一个自动执行的函数中,所以myAlert不会溢出到全局范围。这是两个插件表单之间的一个示例或重用功能

如上所述,这是一个很好的做法,返回jQuery包装元素本身,因为你不想打破链接

最后,我发现了类似的问题:-)

> Difference between jQuery.extend and jQuery.fn.extend?
> jQuery plugin .fn question
> jQuery Plugin Authoring: Why do some do jQuery.pluginName and others jQuery.fn.pluginName?
> in jQuery what is the difference between $.myFunction and $.fn.myFunction?

猜你在找的jQuery相关文章