4

以下のコードで、手動で指定する以外に、名前がアンダースコアで始まらない関数と変数だけをエクスポートする方法はありますか?

var myapp = myapp || {};
myapp.utils = (function() {
  var
    CONSTANT_A = "FOO",
    CONSTANT_B = "BAR";

  function func() {}
  function _privateFunc() {}

  return {//return all variables and functions whose name does not have the "_" prefix.}
}());
4

1 に答える 1

6

あなたのアイデアでは、ローカル スコープ内のすべての変数を一覧表示できる必要があります。残念ながら、JavaScript にはそれができません。この関連する質問を参照してください。

これが行われるのを見た2つの方法があります:

1) エクスポートするオブジェクトに変数が定義されている場合は、すべての変数をアタッチします。

var myapp = myapp || {};
myapp.utils = (function () {
    var exports = {};

    exports.CONSTANT_A = "FOO",
    exports.CONSTANT_B = "BAR";

    exports.func = function func() {}

    function _privateFunc() {}

    return exports;
}());

2) または、オブジェクト リテラルの最後にすべてのエクスポートを一覧表示します。

var myapp = myapp || {};
myapp.utils = (function () {
    var 
       CONSTANT_A = "FOO",
       CONSTANT_B = "BAR";

    function func() {}
    function _privateFunc() {}

    return {
        CONSTANT_A: CONSTANT_A,
        CONSTANT_B: CONSTANT_B,
        func: func
    };
}());

実際に使用されている両方 (および 2 つの混合も) を見てきました。2 番目の方法は、より衒学的に見えるかもしれませんが、読者がコードの 1 つのセグメントを見て、その関数によって返されるインターフェイス全体を確認することもできます。

于 2013-01-18T22:22:24.097 に答える