如果条件为真,则绑定事件或立即执行

时间:2014-08-14 00:08:30

标签: javascript

是否有替代此类代码的已知模式:

if(condition) {
    $(el).on("event", function() {
        doSomething();
    });
}
else {
   doSomething();
}

doSomething总是相同的功能?

3 个答案:

答案 0 :(得分:1)

把它包起来?

function doBindOrExecute(el, condition, func) {
  if(condition) {
      $(el).on("event", function() {
          func();
      });
  }
  else {
     func();
  }
}

doBindOrExecute(el, true, function() {
  // Do stuff
});

答案 1 :(得分:1)

如果您正在寻找一个简短的解决方案,您可以尝试这样的事情。

$(el).on('event', condition ? doSomething : doSomething() && false);

使用Ternary Operator,如果conditionevaluated as true,它会将'event'绑定到函数doSomething。否则它将调用doSomething并始终使用值false,因此无论doSomething的返回值是什么,都不会实际绑定任何内容。

答案 2 :(得分:0)

不是最好的可读性或维护,但可以做:

if(condition || doSomething()) {
    $(el).on("event", function() {
        doSomething();
    });
}

只要doSomething()没有返回真值。但把它包起来绝对是一种更好的方式。