1

さまざまな要素に関連付けられているイベント ハンドラーのリストがありますが、特定の条件が true の場合にそれらのいくつかを無効にしたいと考えています。この条件 (ブール値) は動的に変化し、いつ変化するかは予測できません。これが私が現在していることです。

function foo () {
    if (someCondition) {
        return;
    }

    // foo does something
}

function bar () {
    if (someCondition) {
        return;
    }

    // bar does something
}

...etc

これは問題ありませんが、各関数に if ブロックがあるのは本当に冗長です。これを管理するためのより簡潔な方法はありますか?1 つの要素に 2 つのイベント ハンドラーをアタッチし、もう一方が true を返した場合にのみ 1 つを実行できるかどうか疑問に思っていました。

4

2 に答える 2

6

関数を、条件が真の場合にのみ実行される関数に変える関数を作成できます。

function conditionalize( fn ) {
  return function() {
    if (someCondition) return;
    return fn.apply(this, arguments);
  };
}

それで:

var foo = conditionalize(function() {
  // stuff that foo does
});
于 2013-09-14T13:32:09.127 に答える
1

jQueryイベント処理アプローチのようなデリゲートアプローチを使用できます。これを試してください:

var callbacks = [foo, bar];

function delegate() { // this is the only event handler
    var i, len;
    for(i=0, len = callbacks.length; i < len; i++) {
        if(callbacks[i].apply(this, arguments)){
            continue; // return value of this callback is true then continue
        } else {
            break; // ignore other callbacks
        }
    }
}

function foo () {
    // foo does something
}

function bar () {
    // bar does something
}
于 2013-09-14T13:44:19.220 に答える