我正在开发一个包含大量javascript的Web项目,我们开始遇到名称空间冲突,因为我们将所有内容添加到“$。”。
我读到了关于命名空间的信息,并在http://addyosmani.com/blog/essential-js-namespacing/
找到了很棒的文章我试图按照建议在IIFE中设置命名空间,并认为我很幸运,因为该功能已经设置为
(function() { ... });
所以我将其转换为:
(function(namespace, undefined) { ... })(window.stuff = window.stuff || {});
只发现(工作时间后)实际原件是
$(function() { ... }
这意味着它在jQuery的ready()函数中被调用。
我想保留命名空间IIFE,但无法弄清楚如何在jQuery的ready()函数中使用它。这是可能的,如果是这样的话?
答案 0 :(得分:0)
var namespace = (function() {
// local variables and functions
function readyHandler($) {
// DOM ready code
$("selector").method();
}
// exposed methods
return {
readyHandler: readyHandler
};
})();
jQuery(namespace.readyHandler);
答案 1 :(得分:0)
嗯,不确定你的概念是否直接......这些函数都不像立即调用函数表达式,因为你没有调用函数。
(function() { ... } ());
--^-- invoke function
jQuery的ready
已经创建了一个新的闭包,所以你无论如何都不需要IIFE。
在任何情况下,使用jQuery时,您可以使用一个不会污染它的对象在$
命名空间中命名插件。
$.myplugin = {
...
}