考虑到以下javascript,如果初始索引大于0,在咖啡脚本中编写此循环的最佳方法是什么:
function mixin(target, source, methods) {
for (var i = 2, l = arguments.length; i < l; i++){
var method = arguments[i];
target[method] = source[method].bind(source)
}
}
自动代码转换器建议使用while
循环,如下所示:
mixin = (target, source, methods) ->
i = 2
l = arguments.length
while i < l
method = arguments[i]
target[method] = source[method].bind(source)
i++
有更简洁的方法吗?
答案 0 :(得分:3)
使用exclusive range(三点,排除最高数字。
for i in [2...arguments.length]
method = arguments[i]
target[method] = source[method].bind(source)
如果你的args中有5件事,这将会触及索引2,3和4.
答案 1 :(得分:3)
在定义mixing
函数时,您通常会在CoffeeScript中使用splat:
JavaScript arguments对象是一种处理接受可变数量参数的函数的有用方法。 CoffeeScript提供splats
...
,用于函数定义和调用,使可变数量的参数更加可口。
所以你要说:
mixin = (target, source, methods...) ->
# splat ----------------------^^^
for method in methods
target[method] = source[method].bind(source)
你的问题就消失了。参数列表中的splat会将source
之后的所有参数收集到methods
数组中,这样您就不必担心arguments
; splat也使函数的签名很好而且很明显。