我希望最终摆脱我的JS编写无结构的方式,并最近阅读了大量有关“揭示模块模式”的内容。对我来说,这似乎非常有用,但我仍然没有找到一些问题的答案。假设我们在JS中有一些不同的模块,例如“site”和“nav”。 “nav”模块中有一些私有函数,并且可能稍后还有一些公共函数。那么,在这些模块中调用init函数的最佳方法是什么?我想创建一个公共函数,并使用MODULE.init()
;进行调用。但是我认为这似乎是不好的实践,并且我之前也没有见过这种情况。
$(function () {
var site = (function () {
var
module = {},
privateVar = 3; // private variable
function privateFunction() { // private function
// some code here
}
module.init = function () {
// global init function
};
return module;
}());
var nav = (function () {
var
module = {},
navOpen = false; // private variable
function open() { // private function
// some code here
}
function close() { // private function
// some code here
}
module.init = function () {
// event handlers for open and close functions etc.
};
return module;
}());
nav.init();
site.init();
});
还有一个问题,我在阅读的任何文章中都没有找到答案,那就是如何定义一个全局变量(比如body),我可能需要在我的任何模块中使用它(添加一些类或其他操作)。假设我需要在“nav”和“site”模块中都访问我的body
(就像jQuery中的$("body")
),那么这样做更好吗:
$(function () {
var site = (function () {
var
module = {},
body = $("body"); // creating the "body" variable in every module
// .. module code
return module;
}());
var nav = (function () {
var
module = {},
body = $("body"); // and again in this module
// module code
return module;
}());
});
或者将它放在你的JS文件的顶部。
$(function () {
var
body = $("body");
var site = (function () {
// module code
}());
var nav = (function () {
// module code
}());
或者有更好的方法来做这件事/ 总体上改进我的代码有什么建议?感谢您提前帮助。