我正在尝试编写一个名为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}}
答案 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