Function :: apply而不覆盖接收器

时间:2015-02-24 06:18:37

标签: javascript coffeescript

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}。

这不可能吗?

1 个答案:

答案 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

演示:http://jsfiddle.net/ambiguous/1kgzc1kn/