为什么人们将自己的自定义/用户函数添加到 jQuery 对象中? [关闭]

2024-05-12

我见过人们将自己的自定义/用户功能添加到jQuery目的 ($)。例如:

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

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


您所询问的构造:

$.myUserFunc = function() {}

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

人们可能会这样做的原因有多种——其中一些可能比其他更有道理。

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

  2. 您有一个全局函数,您不想将其放入全局命名空间(出于避免使用许多顶级全局名称的所有典型原因),并且您碰巧正在使用 jQuery,因此您选择将全局函数放在jQuery 命名空间对象。

在我看来,第一条有一定道理。如果它是 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();
    };

})();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么人们将自己的自定义/用户函数添加到 jQuery 对象中? [关闭] 的相关文章

随机推荐