如何解决在JavaScript中绑定回调函数? 不要与Function.prototype.bind混淆
| 我一直将脚趾插入Javascript中,现在看下面的代码: var router = new(journey.Router)({
...
});
router.root.bind(function (res) { res.send(\"Welcome\") });
问题:上面绑定的根函数是什么?此绑定有什么作用?
我知道\'bind()\'应该将函数的执行作为上下文绑定到指定的对象。我不明白如何将一个函数/方法绑定到另一个函数。我看过的所有参考都在谈论绑定到对象。
解决方法
\'root \'是在trip.js(第145行)中定义的getter方法,
get root() {
return this.get(\'/\');
},
这只是权宜之计
get(\'/\')
在这种情况下,绑定调用会将提供的回调函数与定义为root的路由相关联,这样,与根路径(\'/ \')匹配的任何请求都将由字符串\'Welcome \'回答。
更新
在进一步研究了travel.js源代码之后,看来在这种情况下使用bind()根本不是示例。
而是将此特定的bind()定义为第131行的trip.js中route()返回的对象的函数(依次由get()调用),并且仅用于设置(或绑定)处理程序针对特定路线。
重要说明:对bind()的此调用与Function.prototype.bind()不同。
我将先前的答案留在下面,因为我相信在这种情况下,有关咖喱的信息仍然有价值。
Function.prototype.bind()的这种用法称为\'currying \',用于提供一个新函数,该函数已经为其一个或多个预期参数提供了值。
一个简单的例子是:
函数addSome(amount,value){
返回值+金额;
}
可以使用它来产生新功能:
var addOne = addSome.bind(1);
并与以下内容完全相同:
函数addOne(value){
返回addSome(1,value);
}
咖喱是[功能编程]的一项功能。
有关bind()的说明,请参见[bind-MDN Docs];有关此技术的正式定义,请参见[currying]。
[函数式编程]:http://zh.wikipedia.org/wiki/Functional_programming
[绑定-MDN文档]:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind
[currying]:http://en.wikipedia.org/wiki/Currying
, 对您使用的对象并不完全熟悉,但是它正在使用javascript \“匿名函数\”创建一个包含大量代码的对象,因此可以像变量一样传递它。稍后可以通过将()附加到末尾来调用它。
参见:http://helephant.com/2008/08/23/javascript-anonymous-functions/
这种事情的最常见用法可能是用于设置回调函数,也就是说,当您在路由器上调用某个函数时,当该函数完成时,它将首先通过调用您绑定到该函数的函数来完成。
假设我正在使用通用JavaScript库(例如colorbox)在屏幕上弹出一个对话框,并提示用户输入信息。一旦完成,或者如果用户关闭框而不输入任何内容,我希望框执行自定义操作。我不想在colorbox的源代码中进行挖掘,因此它们为各种回调函数提供了空间。例如,当用户输入信息并单击按钮时,它将关闭颜色框,提交ajax并刷新基础页面。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。