2015-02-06 30 views
0

是有辦法來檢測是否在一個鏈(連貫接口)方法調用在該鏈TAIL位置?JS方法鏈尾

var some = g.f(arg1).f(arg2).f(arg3); 

還是我們絕對需要這樣的東西

var some = g.f(arg1).f(arg2).f(arg3).end(); 

,我想避免?

返回的值是不是對我來說很重要,但我需要計算在鏈的末端東西(一個內部類字符串的鍵),可以用從一個調用到另一個具有不同的長度。

回答

0

沒有,沒有辦法,如果函數調用看起來相同的,因爲下一個鏈接的調用尚未發生,並解釋不爲您提供任何證據,是否有檢測一個給定的方法是在尾部位置另一個鏈接調用即將到來。


也許你認爲是你正在尋找的線索,一個可選的第二個參數:

var some = g.f(arg1).f(arg2).f(arg3, "end"); 

然後,你f()功能也只是檢查,看看是否第二個參數存在並且有適當的價值,如果是的話,它可以執行尾部操作。


或者,你可以做一個稍微不同的版本的f()稱爲fTail()(或任何你想將它命名):

var some = g.f(arg1).f(arg2).fTail(arg3); 

fTail()看起來是這樣的:

xxx.prototype.fTail = function() { 
    var retVal = this.f.apply(this, arguments); 

    // now do your tail operations here 

    return retVal; 
}; 

正如你所提出的,我想我會用自個參數的數組去在似乎解決您的所有問題,易於使用,並將表現良好:

var some = g.f([arg1, arg2, arg3], fn); 
+0

謝謝,它有幫助!我試圖實現一個活淨有線數據結構,可隨時看到我的github:hefeust/retiare如果你會使它的想法.. 我試圖決定: g.relation()。角色(role1上)。角色(基於role2)。在( '鏈接',函數(){...}) VS g.relation([角色],[處理]) 也許是第二種方法(不鏈接,完全在數組中指定)將在考慮您的答案後獲勝。 關於 – 2015-02-06 09:24:16

+0

@HefeustCORTES - 使用單個方法調用接受一系列項目,與使用N個鏈接函數調用相比,使用它的代碼更少,而且執行速度更快,當然,您會知道何時處理完陣列中的最後一個。這並不意味着鏈在許多情況下(它是)沒有用處,但通常不會一遍又一遍地使用相同的方法。 – jfriend00 2015-02-06 09:31:45