obj =
test: -> this.doSomething()
args = [...]
try
obj.test.apply undefined, args
catch e
console.error e
理想的结果是obj.test.apply
不引发错误。虽然我找不到任何方法在函数调用(aka Function::apply
)中传播数组而不覆盖接收器(this
内的obj.test
}。
这不可能吗?
答案 0 :(得分:1)
如果你真的想使用apply
,那就告诉它this
应该是什么:
obj.test.apply obj, args
但由于这是CoffeeScript,您可以隐藏splat后面的所有内容:
obj.test(args...)
在JavaScript版本中变为obj.test.apply(obj, args)
。
例如:
args = [ 1 ]
obj.test(args...) # same as obj.test(1)
args = [ 1, 2 ]
obj.test(args...) # same as obj.test(1, 2)
您还可以在函数定义中使用splat使其具有可变参数:
obj =
test: (args...) -> # do things with the `args` array