「根」是在journey.js(在線路145)作爲
get root() {
return this.get('/');
},
限定的吸氣劑的方法,其是僅僅爲了
get('/')
而在這種情況下,呼叫的權宜速記綁定會將提供的回調函數與以root身份定義的路由相關聯,以便任何匹配根路徑('/')的請求都將由字符串'Welcome'回答。
修訂
一旦journey.js源的進一步檢查,它出現在該上下文中,使用綁定的()是不討好在所有的例子。這個特定的bind()被定義爲route()返回的對象的一個函數(它依次在第131行的journey.js中被get()調用),並且僅用於設置(或者綁定)特定路由的處理程序。
重要:此呼叫綁定()IS NOT相同Function.prototype.bind()。
因爲我相信有關咖喱的信息在這種情況下仍然有價值,
這個使用Function.prototype。bind()被稱爲'currying',用於提供一個新的函數,該函數已經爲一個或多個預期參數提供了值。 一個簡單的咖喱例子就是假設: function addSome(amount,value){ return value + amount; } 它可以被用來產生一個新的功能: var addOne = addSome.bind(1); 並且完全相同: 函數addOne(value){ return addSome(1,value); } Currying是[函數式編程]中的一個特性。 有關此技術的正式定義的bind()和[currying]的解釋,請參見[bind-MDN Docs]。 [功能程序設計]:http://en.wikipedia.org/wiki/Functional_programming [bind-MDN Docs]:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind [currying]:http://en.wikipedia.org/wiki/Currying
這是脫離上下文的方式。你怎麼知道它來自哪個代碼片段?如何工作,不是從'.get('/')'按值傳遞的函數返回的函數,而是將其綁定到該函數的本地副本。這是該庫的一些可怕的魔法API。 – Raynos
@Raynos,剛剛更新了有關'currying'的更多信息,這是該庫使用的技術。我知道它來自哪裏,因爲我查看了源代碼。 ;) –
@RobRaisch你意識到'.bind'的第一個參數是上下文,第二個(和之後)是curried參數。還有一個問題是綁定函數沒有保存在任何地方。如果您不打算將綁定函數存儲在變量中,綁定似乎毫無用處。 – Raynos