下划线具有对象函数_.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);
};
};