Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在调用包装器的同时给它一个要运行的函数,还有什么更优雅的方法呢_Javascript_Function_Ecmascript 6_Lambda - Fatal编程技术网

Javascript 在调用包装器的同时给它一个要运行的函数,还有什么更优雅的方法呢

Javascript 在调用包装器的同时给它一个要运行的函数,还有什么更优雅的方法呢,javascript,function,ecmascript-6,lambda,Javascript,Function,Ecmascript 6,Lambda,我有一个包装函数wrapperparam1、param2、param3、myfunc和myfunc,它被定义为myfuncparam1、param2、param3 我想在函数调用中调用myfunc上的包装器,函数调用将函数作为参数并使用参数调用它。现在,我的函数调用看起来像callerparam1,param2,param3=>wrapperparam1,param2,param3,myfunc 当然,在包装器中有一行myfuncparam1,param2,param3 有没有办法重写这一切,使

我有一个包装函数wrapperparam1、param2、param3、myfunc和myfunc,它被定义为myfuncparam1、param2、param3

我想在函数调用中调用myfunc上的包装器,函数调用将函数作为参数并使用参数调用它。现在,我的函数调用看起来像callerparam1,param2,param3=>wrapperparam1,param2,param3,myfunc

当然,在包装器中有一行myfuncparam1,param2,param3


有没有办法重写这一切,使函数调用更优雅?我希望能够在其他地方方便地调用wrapper,这些地方为它提供了前3个参数,并以某种方式为它提供了一个函数。

为什么不切换参数,首先获取回调,然后获取参数呢

const wrapper = (fn, ...args) => () => fn(...args);
这种方法允许对参数进行任意计数

旧的标准方法是绑定函数,如

function wrapper(fn, ...args) {
    return fn.bind(null, ...args);
}

我找到了一个好答案。我将包装器从wrapperparam1、param2、param3、myfunc更改为funcCallermyfunc、param1、param2、param3,并制作了另一个函数wrapper=func=>funcCaller.bindnull、func


我不明白为什么要这样订购。如果有人能解释一下为什么订单会这样翻转,我会很高兴的。

问题是,我想在我的来电中去掉lambda。我希望有类似callerrapper.myfunc/callermyfunc.wrapper的东西,我需要重写wrapper以适应。值得注意的是,虽然我可以重写包装器和myfunc,但我宁愿保持myfunc的原样,调用方是一个我无法重写的库函数。当然,我使用占位符名称来抽象问题,因为我想学习ES6/javascript最通用的解决方案