很抱歉我忽略了一些显而易见的东西,但是我不知道如何在javascript中绑定函数的一个特定参数,我学到的大多数函数式编程都是从Scala学来的,所以我不确定这在JS中是否可行。
例如,我知道我可以执行以下操作来绑定第一个参数
var add = function (a, b) {
return a + b;
};
add(1, 3); //returns 4
var addThree = add.bind(null, 3); //this = null. a = 3
addThree(4); //returns 7
但是我如何绑定第二个参数而保持第一个不变。换句话说,我如何只绑定到'b'?
从mozilla -https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind中我可以看出,参数实际上是嵌套的,这使得它看起来像是必须按照特定的顺序?(我很可能阅读错了)
编辑:我意识到这是一个人为的例子,我只是想学习一下,以防我最终要处理比两个数字相加更复杂的事情,我也想了解bind()参数实际上是如何工作的。
5条答案
按热度按时间drnojrws1#
当然可以,下面是一个使用spread运算符(
...
)的ES6解决方案,因为它更紧凑一些。如果您希望指定绑定开始的位置:
在ES5中,你不得不在构造参数列表上浪费时间。
与前两个示例不同,这个示例正确地处理了
this
。在您示例的上下文中:
您也可以考虑使用JS可用的函数式编程库之一,例如http://osteele.com/sources/javascript/functional/,您需要的东西在那里被称为
rcurry
。ulmd4ohb2#
可以使用lodash的
_.bind
来实现这一点:我通常反对使用库,更喜欢编写自己的实用函数,但是lodash很容易成为一个例外。我强烈建议您在遇到"这一定是该语言中的某个地方!"的时候检查its documentation,它填补了JavaScript中的许多空白。
wlp8pajw3#
好吧。我就直说了。
也许对一些人来说还可以。
a7qyws3x4#
你可以试试这个:
带有null或undefined的绑定参数将被替换为函数参数,剩下的参数将被附加到末尾。如果对象是绑定的,则将使用对象,否则将使用当前的...
查看控制台获取结果!
lnvxswe25#
this
参数Symbol.split
来区分前导和尾随参数,如果直接传递包含要绑定的参数的前导和尾随数组,可能会更好。undefined
前导绑定参数中的值将替换为传入的参数copyProperties
& REMOVE_DESCRIPTORS以忽略行为使用
Symbol.split
:直接传递前导和尾随参数。
一个二个一个一个