0

私の質問が十分に明確でなかったら申し訳ありません。私はここに私のコードを入れます...

var chain = {
    'fn_1' : {
             //fn_1 code here
             chain.fn_2();},
    'fn_2' : {
             //fn_2 code here
             chain.fn_3();}

...and so on
}

chain.fn_1() を呼び出したい場合、chain.fn_2() を呼び出さずにそれを行う方法はありますか?

私が今考えることができるのはフラグですが、それはおそらく各関数の余分なフラグです。何かアイデアはありますか?

4

3 に答える 3

5

一連の関数がそれぞれ正しい次の関数を呼び出す場合は、何らかのフラグが必要です。おそらく、オブジェクトへの参照を返すように関数を変更するのが最善でしょう。次に、次のようにチェーンできます。

var chain = {
  'fn_1': function () {
    // do something here.
    return this;
  },
  'fn_2': function () {
    // do something here.
    return this;
  },
  'fn_3': function () {
    // do something here.
    return this;
  }
};

// call the full chain:
chain.fn_1().fn_2().fn_3();

// call only the middle.
chain.fn_2();
于 2011-06-06T17:53:55.420 に答える
1

gddc の回答が最適ですが、何らかの理由でオブジェクトを変更できない場合は、次のようにすることができます。

var _oldFn2 = chain.fn_2
chain.fn_2 = function() { return; };
chain.fn_1();
chain.fn_2 = _oldFn2;
于 2011-06-06T18:06:00.390 に答える
0
var chain = {
    fn : ['fn1', 'fn2', 'fn3'],
    call : function(name) {
       var i = 0, pos = -1, l = this.fn.length;
        for(i = 0; i < l; i += 1) {
            if(this.fn[i] == name) {
                pos = i;
            }
            if(pos !== -1) {
                this[this.fn[i]]();             
            }
        }

    },
    fn1 : function() {
        alert('fn1');
    },
    fn2 : function() {
        alert('fn2');
    },
};
chain.call('fn1'); //chain
chain.fn1(); //single
于 2011-06-06T19:02:50.553 に答える