Javascript强调如何共享相同的回调

时间:2015-09-04 00:24:53

标签: javascript closures underscore.js

是否可以共享相同的回调?我如何将_id作为第二个参数传递给回调?

e.g。

function getEntry(_id) {

    if (_id === undefined) {
        return false;
    }
    return _(this.scope[this.key]).find(function(entry) {
        return entry._id === _id;
    });
}

function getEntryIndex(_id) {
    if (_id === undefined) {
        return false;
    }
    return _(this.scope[this.key]).findIndex(function(entry) {
        return entry._id === _id;
    });
}

我想要做的是为findIndex和find执行一个回调-e.g谓词 - 因为它们正在执行相同的任务,但是如何将_id传递给谓词?

  function predicate(entry, _id) {
      return entry._id === _id;
  }

  function getEntry(_id) {

      if (_id === undefined) {
          return false;
      }
      return _(this.scope[this.key]).find(predicate);
  }

  function getEntryIndex(_id) {
      if (_id === undefined) {
          return false;
      }
      return _(this.scope[this.key]).findIndex(predicate);
  }

1 个答案:

答案 0 :(得分:1)

我建议重新构建predicate函数,就像这样

function predicate(_id, entry) {
    return entry._id === _id;
}

然后在将_idfind传递给findIndex时绑定return _(this.scope[this.key]).find(_.partial(predicate, _id)).value(); .... return _(this.scope[this.key]).findIndex(_.partial(predicate, _id)).value(); 的值

getEntry

请注意最后的.value()来电。这将给出实际返回的值。

实际上,您可以重构代码以仅使用一个function predicate(_id, entry) { return entry._id === _id; } function getEntry(func, _id) { if (_id === undefined) { return false; } return _[func](this.scope[this.key], _.partial(predicate, _id)); } getEntry('find', 1); getEntry('findIndex', 1); 函数,例如

func

在这里,我们选择要使用参数_id调用的函数,然后使用_.partial创建一个新函数,将predicate参数应用于<LinearLayout local:MvxBind="Visibility RedeemCodeState, Converter=RedeemStateToVisibility, ConverterParameter=0" 函数。