Javascript - 在所有函数的输入上以编程方式执行方法

Javascript - Programmatically execute method on input of all functions

我想将解析器添加到函数列表中,例如:

var list = {
    function1: function(input){},
    function2: function(input){}
}

我希望所有 input 参数都预先处理了另一个函数。这可能吗?

有什么建议吗?

提前致谢

你的意思是这样的吗?它使用将 f 预应用到其输入的方法创建 funcs 的新副本。:

function addPreProcessing(funcs, f) {
    return Object.keys(funcs).reduce(function (o, key) {
        o[key] = function (input) {
            return funcs[key](f(input));
        };
        return o;
    }, {});
}

var list = {
     log: function (input) { snippet.log(input); },
     quadruple: function (input) { return input * 4; }
};

// preprocess all inputs by doubling them
var list2 = addPreProcessing(list, function (input) {
     return input * 2;
});

list2.log(5);                        // logs 10   ( 5 * 2 )
snippet.log(list2.quadruple(1));     // logs 8    ( 1 * 2 * 4)
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

这里是上面 addPreProcessing 函数的 lodash 版本:

function addPreProcessing(funcs, f) {
    return _.mapValues(funcs, _.flowRight(_.partial(_.flow, f), _.identity));
}