下划线有一个对象函数_.property(key),它返回一个函数,该函数本身返回任何传入对象的'key‘属性。例如:
var moe = {name: 'moe'};
var propFunction = _.property('name');
var value = propFunction(moe);
=> 'moe'我想知道,除了一个对象的属性之外,是否有一种好的方法可以用下划线来获得对象函数的相同行为。我很确定它没有一个函数,但是我想知道是否有一些合理的函数组合在一起可以完成我想做的事情。例如:
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'));不管它有什么价值,如果没有一种很好的方法来完成我所要求的,但您仍然有更好的方法来编写我上面的伪实代码,我仍然很想听!
发布于 2014-03-05 18:01:07
您正在寻找强调在_.invoke()中使用的回调函数--但是这不是公开的。您可以自己轻松地构建它:
_.method = function(name) {
var args = _.tail(arguments),
isFunc = _.isFunction(name);
return function(value) {
return (isFunc ? name : value[name]).apply(value, args);
};
};发布于 2014-03-05 17:17:55
您可以创建基于_.property的自己的函数
function callProperty(prop) {
var getProperty = _.property(prop);
return function(obj) {
return getProperty(obj)();
};
}发布于 2014-03-05 17:46:10
我能想到的最短的是使用:_.result()
function functionProp(prop){
return function(obj){
return _.result(obj, prop);
};
}它实际上也适用于非函数属性。所以:
var moe = {getName: function() { return this.name; }, name: 'moe'};
'moe' == functionProp('getName')(moe);
'moe' == functionProp('name')(moe);https://stackoverflow.com/questions/22204329
复制相似问题