沒有,沒有辦法,如果函數調用看起來相同的,因爲下一個鏈接的調用尚未發生,並解釋不爲您提供任何證據,是否有檢測一個給定的方法是在尾部位置另一個鏈接調用即將到來。
也許你認爲是你正在尋找的線索,一個可選的第二個參數:
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);
謝謝,它有幫助!我試圖實現一個活淨有線數據結構,可隨時看到我的github:hefeust/retiare如果你會使它的想法.. 我試圖決定: g.relation()。角色(role1上)。角色(基於role2)。在( '鏈接',函數(){...}) VS g.relation([角色],[處理]) 也許是第二種方法(不鏈接,完全在數組中指定)將在考慮您的答案後獲勝。 關於 – 2015-02-06 09:24:16
@HefeustCORTES - 使用單個方法調用接受一系列項目,與使用N個鏈接函數調用相比,使用它的代碼更少,而且執行速度更快,當然,您會知道何時處理完陣列中的最後一個。這並不意味着鏈在許多情況下(它是)沒有用處,但通常不會一遍又一遍地使用相同的方法。 – jfriend00 2015-02-06 09:31:45