下划线具有对象函数_.property(key),该函数返回一个函数,该函数本身返回任何传入对象的'key'属性。例如:

var moe = {name: 'moe'};
var propFunction = _.property('name');
var value = propFunction(moe);
=> 'moe'


我想知道,除了对象的属性外,Underscore是否有一种很好的方法可以使对象的功能获得相同的行为。我很确定没有单个函数,但是我想知道是否存在某种合理的函数组合,这些函数可以一起完成我想要的事情。例如:

var moe = {getName: function() { return 'moe'; }};
var funcFunction = _.underscoreGoodnessHere('getName');
var value = funcFunction(moe);
=> 'moe'


这将是我喜欢的一些伪真实代码中删除的一些样板:

this.collection.filter(function(model) { return model.isHidden(); });
// could change to this:
this.collection.filter(_.underscoreGoodness('isHidden'));


就其价值而言,如果没有一种很好的方法可以完成我所要求的操作,但是您仍然可以通过更好的方式编写上面的伪真实代码,我仍然很乐意听到!

最佳答案

您正在寻找Underscore在_.invoke()中使用的回调函数-但这不是公共的。您可以自己轻松构建它:

_.method = function(name) {
  var args = _.tail(arguments),
      isFunc = _.isFunction(name);
  return function(value) {
    return (isFunc ? name : value[name]).apply(value, args);
  };
};

09-11 19:45
查看更多