0

パフォーマンスを念頭に置いて Javascript モジュールを作成する方法を模索しています。

//私のライブラリ
var MyModule = 関数(コールバック){
    変数カウント = 0;

    主要(); //私の意見では醜い

    //Function 公開したい。
    関数 main(){
        カウント ++;
        window.specialApi.doWorkAndCallback(シークレット);
        //…
    }

    //非公開にしたい関数
    //カウンタ変数にアクセスする必要があります (#closure)
    関数シークレット(){
        もし(カウント=== 2){
            折り返し電話();
        }
    }

    //プライベート関数
    //その他のプライベート関数
    //…
};


//後で、他の誰でも MyModule を使用できます。
MyModule(function(){console.log("ok");});

ここで見つけた問題は、MyModule() を呼び出すたびに、JS VM が関数リスト全体を再解釈するため、パフォーマンスが良くないことです。

次のことを可能にするパターンはありますか:

  • メイン関数を公開します。
  • シークレット機能は非公開にしてください。タスクを強化する可能性のあるカウンター変数に注意してください。
  • 一度だけ解析するMyModule

ありがとう

4

2 に答える 2

0
  //My lib
    var modul =  
        {
        count:0,
        callback:{},
        main: function(){
           this.count ++;                        
            window.specialApi.doWorkAndCallback(this.secret);     
        },
        secret: function(){
            if(this.count === 2){
              this.callback();
            } 
        }
    };


    modul.callback = function(){console.log("ok");};
    modul.main();

    modul.callback = function(){console.log("ok");};
    modul.main();

    modul.callback = function(){console.log("ok");};
    modul.main();

    modul.callback = function(){console.log("ok");};
    modul.main();

http://jsbin.com/emitoj/3/edit

于 2013-05-30T16:34:31.307 に答える
0

main次の関数は、メソッドのみを含むオブジェクトを作成して返します。

var MyModule = function(callback){
    var count = 0;

    var secret = function(){
        if(count === 2){
            callback();
        } 
    }

    var main = function(){
        count ++;
        window.specialApi.doWorkAndCallback(secret);
    }

    main();

    return {
        main: main
    };
};

次に、この関数を 1 回呼び出して、その戻り値を変数に格納するだけです。

var module = MyModule(function(){console.log('ok');});

最後に、 を呼び出すmain(および の古い値を保持するcount) 場合は、次のようにします。

module.main();
于 2013-05-30T16:32:37.253 に答える