我想最终摆脱我编写 JS 的非结构化方式,并且最近对“揭示模块模式”大加关注。至少对我来说它似乎很有用,但我还没有找到我的一些问题的答案。假设我们的 JS 中有一些不同的模块,在本例中为“site”和“nav”。 “nav”模块中有一些私有(private)函数,稍后可能还有一些公共(public)函数。在这些模块中调用 init 函数的最佳方式是什么。我想为它们创建一个公共(public)函数,然后用 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
}());
或者是否有更好的方法来改进我的代码?预先感谢您的帮助。
最佳答案
由于闭包,您将可以访问主体变量,example here .
因此,您不需要在函数中声明一些主体变量。
对于构造函数问题,您已经有一个,是用于声明对象的函数,请参见此示例以获取 detailed example
关于javascript - 揭示模块模式 - 全局变量/初始化函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19223443/