为什么人们要在jQuery对象中添加自己的自定义/用户函数

Why do people add their own custom/user functions to the jQuery object?

本文关键字:自己的 添加 自定义 函数 用户 对象 jQuery 为什么      更新时间:2023-09-26

我见过人们将自己的自定义/用户函数添加到jQuery对象($)中。例如:

$.myUserFunc = function() { /* regular JS code */}

你为什么要这么做?为什么不将函数创建为简单的myUserFunc,而不是$.myUserFunc,或者(如果你想避免污染全局范围)将其放在另一个自定义/用户对象上,如myObj.myUserFunc

您询问的构造:

$.myUserFunc = function() {}

在jQuery命名空间对象上创建一个静态函数(全局可用)。这与jQuery插件方法不同。

人们可能会这样做有几个原因——有些原因可能比其他原因更有道理。

  1. 您可以创建一个与jQuery直接相关的jQuery实用程序函数(仅在使用jQuery时有用),但它的级别与插件方法不同。

  2. 您有一个不想放在全局名称空间中的全局函数(由于避免使用许多顶级全局名称的所有典型原因),而您恰好使用jQuery,因此您选择将全局函数放在jQuery namspace对象上。

在我看来,第一个是有道理的。如果它是特定于jQuery的函数,但它是一个全局函数,而不是jQuery对象的方法(就像插件一样),那么将它放在主jQuery上是有意义的。当已经有合适的名称空间并且您的函数与该名称空间对象相关时,实际上没有理由再实现另一个顶级名称空间。

在我看来,从建筑的角度来看,第二个原因没有那么大的意义。如果这个函数不是特定于jQuery的函数(例如,不使用或操作jQuery对象),那么它实际上不属于jQuery对象。它是一个通用函数,应该以更通用的方式进行定义,可以是单例全局函数,也可以是,如果有多种类型的相关函数,则将其放在自己的命名空间对象上。


也就是说,在许多情况下,您只需创建自己的闭包并定义自己的函数供自己的代码使用,而不必将它们放在全局名称空间或名称空间对象中。因此,除非这些函数必须可以从任何地方全局访问,否则它们不需要在jQuery对象上运行。

例如,假设您有两个jQuery插件方法,它们想要共享一个公共函数。显然,必须在这两个插件方法之外定义此函数。但是,它不必在全球范围内定义。我可以被关闭并以这种方式共享:

// define closure
(function() {
    // declare shared function in a closure
    function commonFunc() {
        // common code here
    }
    // define first plugin method
    jQuery.fn.plugin1 = function() {
        // do stuff
        // ....
        // use common function
        commonFunc();
    };
    // define other plugin method
    jQuery.fn.plugin2 = function() {
        // do different stuff
        // ....
        // use common function
        commonFunc();
    };
})();