3

我想最终摆脱我编写 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
    }());

或者有没有更好的方法来做到这一点/总体上改进我的代码?在此先感谢您的帮助。

4

1 回答 1

1

借助 Closure(此处的示例),您将可以访问主体变量。

因此,您不需要在函数中声明一些主体变量。

对于构造函数问题,您已经有一个,是用于声明对象的函数,请参阅此示例以获取详细示例

于 2013-10-07T11:40:17.893 回答