0

アプリと呼ばれるメイン関数を作成しようとしています。特定のパブリック関数とプライベート関数があります。以下のコードを参照してください。私はそれをモジュラーな方法で書きたいと思っています。

問題は、いくつかのプライベート関数をパブリック関数にマップしたいのですが、それができないことです。

たとえば

プライベート関数を呼び出して、のようなパブリック関数にアクセスできるようにする App.ModuleA必要があります。_A()App.ModuleA.fun_1

私はそれを機能させることを知っています。_A() を public にする必要があります。しかし、関数をマップすることは可能ですか?

どうすればそのようなマッピングを実現できますか? 誰でもより良いコーディング構造を提案できますか?アプリ内のサブ関数とそのパブリック関数にもアクセスできますか?

今の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() は自己呼び出し関数ではないため、括弧を削除してください。

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

次の 2 つの変更のいずれかを行う必要があります。

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

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

または:

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

あなたの例_Aでは、すでに評価されているため、もはや関数ではありません。

于 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 に答える