0

我正在开发一个包含大量 javascript 的 Web 项目,我们开始遇到命名空间冲突,因为我们将所有内容都添加到“$.”。

我阅读了有关命名空间的内容,并在http://addyosmani.com/blog/essential-js-namespacing/找到了这篇很棒的文章

我尝试按照建议在 IIFE 内设置命名空间,并认为我很幸运,因为该函数已经设置为

(function() { ... }); 

所以我将其转换为:

(function(namespace, undefined) { ... })(window.stuff = window.stuff || {});

才发现(下班后)原来是

$(function() { ... }

这意味着它都是在 jQuery 的 ready() 函数中调用的。

我想保留命名空间 IIFE,但不知道如何在 jQuery 的 ready() 函数中使用它。这可能吗?如果可以,怎么办?

4

2 回答 2

0
var namespace = (function() {
    // local variables and functions

    function readyHandler($) {
         // DOM ready code
         $("selector").method();
    }

    // exposed methods
    return {
        readyHandler: readyHandler
    };
})();

jQuery(namespace.readyHandler);
于 2012-08-29T00:10:59.057 回答
0

嗯,不确定你是否理解了这些概念......这些函数都不像立即调用函数表达式,因为你没有调用函数。

(function() { ... } ());
                  --^-- invoke function 

jQueryready已经创建了一个新的闭包,所以无论如何你都不需要 IIFE。

在任何情况下,当使用 jQuery 时,您可以在命名空间中使用对象命名您的插件$,这样您就不会污染它。

$.myplugin = {
  ...
}
于 2012-08-29T00:11:10.967 回答