我想最终摆脱我编写 JS 的非结构化方式,并且最近对“Revealing Module Pattern”大肆宣传。至少对我来说它似乎很有用,但我还没有找到我的一些问题的答案。因此,假设我们的 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
}());
或者有没有更好的方法来做到这一点/总体上改进我的代码?在此先感谢您的帮助。