我一直在把我的脚趾浸入Javascript中,现在看下面这段代码:
var router = new(journey.Router)({
...
});
router.root.bind(function (res) { res.send("Welcome") });
问题:上面绑定的根函数是什么?这种绑定有什么作用?
我理解'bind()'应该将函数的执行绑定到指定的对象作为上下文。我不明白函数/方法如何绑定到其他函数。我所看到的所有引用都在讨论绑定到对象。
答案 0 :(得分:4)
'root'是travel.js中定义的getter方法(第145行)
get root() {
return this.get('/');
},
这只是
的一种权宜之计get('/')
在此上下文中,对bind的调用会将提供的回调函数与定义为root的路由相关联,这样任何与根路径('/')匹配的请求都将由字符串'Welcome'来回答。< / p>
已更新
在进一步检查journey.js源代码后,看来在这个上下文中使用bind()是而不是一个currying的例子。
相反,这个特殊的bind()被定义为route()返回的对象的函数(由get()调用,在第131行的journey.js中,并且仅用于设置(或< em> bind )特定路由的处理程序。
重要:这次调用bind() IS 与Function.prototype.bind()相同。
我将在下面留下我之前的答案,因为我相信在这种情况下,关于currying的信息仍然有价值。
<德尔> Function.prototype.bind()的这种使用被称为'currying',用于提供一个新函数,该函数已经为一个或多个预期参数提供了值。 如果你假设一个简单的currying例子: function addSome(amount,value){ 返还值+金额; } 可以通过咖喱来产生一个新功能: var addOne = addSome.bind(1); 和完全一样: function addOne(value){ return addSome(1,value); } Currying是[函数式编程]的一个特性。 有关此技术的正式定义,请参阅[bind - MDN Docs]以获取bind()和[currying]的说明。 [函数式编程]:http://en.wikipedia.org/wiki/Functional_programming [bind - MDN Docs]:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind [讨好]:HTTP://en.wikipedia.org/wiki/Currying 德尔>答案 1 :(得分:0)
并不完全熟悉您正在使用的对象,但它使用javascript“匿名函数”来创建包含一大块代码的对象,以便它可以像变量一样传递。稍后可以通过将()附加到末尾来调用它。
请参阅:http://helephant.com/2008/08/23/javascript-anonymous-functions/
这种事情的最常见用途可能是设置一个回调函数,也就是说,当你在路由器上调用一个函数时,当该函数完成时,它将通过调用你绑定到它的任何东西来完成
假设我正在使用通用的javascript库(例如colorbox)在屏幕上弹出一个对话框并提示用户输入信息。一旦完成,或者如果用户在没有输入任何内容的情况下关闭盒子,我希望盒子能够自定义。我不想在colorbox的源代码中进行挖掘,因此它们允许所有类型的回调函数。假设当用户输入信息并点击按钮时,它将关闭颜色框,提交ajax并刷新基础页面。