3

我想使用显示模块模式设置一些代码。我想设置子模块以便能够访问主模块的私有功能,但我坚持如何做到这一点。

这是我一直在玩的一些示例代码:

var Module = (function() {

    function B(){
        console.log("B");

    };

    return {
        //B: B
    };

})();

var Module = Module || {};

Module.Utils = (function() {

    function C() {

        B();
    };

    return {
        C: C
    }

}).apply(Module);

Module.Utils.C();

我怎样才能做到这一点,以便我可以从 Utils 模块调用私有函数?

编辑:

Jsut 澄清我希望能够创建一个添加到主模块的子模块,所以如果它有助于子模块也可以是模块。我正在阅读:http ://www.sitepoint.com/modular-design-patterns-in-javascript/它使用 apply() 添加第二个模块,但必须使用扩展和私有化功能将模块添加到主要的。如果可能的话,我想远离它?

另一个编辑 简而言之,我希望将一个主模块和第二个模块放在一个仅用于一个部分的新文件中。我需要第二个模块仍然能够引用主模块的私有函数。这可能吗?

这是我提到的代码:

//protected utility functions
    utils =
    {
        //add properties to an object
        extend : function(root, props)
        {
            for(var key in props)
            {
                if(props.hasOwnProperty(key))
                {
                    root[key] = props[key];
                }
            }
            return root;
        },

        //copy an object property then delete the original 
        privatise : function(root, prop)
        {
            var data = root[prop];
            try         { delete root[prop]; } 
            catch(ex)   { root[prop] = null; }
            return data;
        }
    };
4

1 回答 1

4

除非您在与父模块相同的词法范围内定义子模块,并对“父”私有函数进行某种封闭,否则您不能。您将函数设为私有,因此您需要能够看到它们才能调用它们。在与父模块不同的位置定义子模块时,您看不到它们。获得所需结构的唯一方法是:

var Module = (function () {
    function B() {
        console.log("B");
    };

    var Utils = (function () {
        function C() {
            B();
        };

        return {
            C: C
        }
    })()

    return {
        Utils: Utils
    };
})();
于 2013-07-03T13:48:07.137 回答