JavaScript 允许仅在某些条件为真时才执行各种函数

JavaScript Allow various functions to execute only if some condition is true

本文关键字:执行 函数 许仅 条件 JavaScript      更新时间:2023-09-26

我有一个附加到各种元素的事件处理程序列表,但我想在某个条件为真时禁用其中一些。此条件(即布尔值)动态变化,并且在更改时不可预测。这是我目前所做的。

function foo () {
    if (someCondition) {
        return;
    }
    // foo does something
}
function bar () {
    if (someCondition) {
        return;
    }
    // bar does something
}
...etc

这没关系,但是在每个函数中使用 if 块确实是多余的。有没有更简洁的方法来管理这个问题?我想知道我是否可以将两个事件处理程序附加到一个元素,并且仅在另一个返回 true 时才执行一个。

您可以编写一个函数,将函数转换为仅在条件为真时才运行的函数:

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

然后:

var foo = conditionalize(function() {
  // stuff that foo does
});
您可以使用

委托方法,如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
}