2015-02-06 65 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