Jquery编写模块化函数

时间:2013-10-06 07:36:03

标签: jquery

我正在尝试编写一个名为App的主函数。 它有一定的公共和私人功能。请参见下面的代码。 我希望它以模块化方式编写。

问题是我想将一些私有函数映射到公共函数,我无法做到。

例如;

我想致电App.ModuleA,该_A()应致电App.ModuleA.fun_1个私人函数,并授予我TypeError: _A is not a function等公共函数的访问权限。

我知道要让它发挥作用;我需要将_A()公之于众。但是可以映射函数吗?

我如何实现这种映射?任何人都可以建议更好的编码结构所以我可以访问App内部的子功能及其公共功能吗?

现在,当我致电App.ModulaA();

时,我收到错误 var App = function () { // App Private Functions var _A = function () { return { fun_1: function () { alert("_A.fun_1"); }, fun2: function () { alert("_A.fun2"); } }; }(); // App Public Functions return { init: function () { alert("App.init"); }, ModulaA: function () { return _A(); // doesnot work // return this._A(); // doesnot work } }; }(); App.ModulaA();
{{1}}

3 个答案:

答案 0 :(得分:2)

_A()不是自调用函数,因此删除括号,在行动中查看它here

}() <---- remove parenthesis

答案 1 :(得分:1)

您需要进行以下两项更改之一:

var _A = function() {
    //...
}();

// change to:
var _A = function() {
    //...
};

或者:

return _A();
// change to:
return _A;

在您的示例中_A已被评估,因此不再是函数。

答案 2 :(得分:1)

var App = function () {
    //App Private Functions
    var _A = function () {
        return {
            fun_1: function () {
                alert("_A.fun_1");
            },
            fun2: function () {
                alert("_A.fun2");
            }
        };
    },
    init = function () {
        alert("App.init");
    },
    ModulaA = function () {
        return _A();
    };

    // App Public Functions
    return {
        init: init,
        ModulaA: ModulaA
    };
}();

var moduleA = App.ModulaA();
moduleA.fun_1();    //Works
moduleA.fun2();    //Works