0

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

问题是我想将一些私有功能映射到公共功能,但我无法做到这一点。

例如

我想调用App.ModuleAwhich 应该调用_A()私有函数并让我访问它的公共函数,例如 App.ModuleA.fun_1.

我知道让它发挥作用;我需要将 _A() 公开。但是可以映射功能吗?

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

现在我TypeError: _A is not a function打电话时遇到错误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();
4

3 回答 3

2

_A() is not self invoking function, thus remove parenthesis, see it in action here

}() <---- remove parenthesis
于 2013-10-06T07:53:19.643 回答
1

You need to make one of two changes:

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

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

Or:

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

In your example _A has already been evaluated so is no longer a function.

于 2013-10-06T07:51:01.437 回答
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
于 2013-10-06T07:53:19.140 回答