CoffeeScript - 使用参数传递匿名函数

时间:2012-07-22 10:09:18

标签: javascript coffeescript

我无法理解如何传递带参数的匿名函数。这是我的情况:

class MyClass
  constructor: (@a) ->
    console.log("MyClass: created " + @a)

  show: ->
    console.log("MyClass: show " + @a)

然后,使用UnderscoreJS,这可行:

_.map listOfMyClassObjects, (obj) -> obj.show

但是为了方便起见,我想在一个单独的函数中包含对map的调用:

allMyClass(fun) ->
  _.map listOfMyClassObjects, fun(obj)

以便我以后可以这样做:

allMyClass((obj) -> obj.show())

但是浏览器控制台说:

Uncaught ReferenceError: fun is not defined
  (anonymous function)
  require../browser.CoffeeScript.run
  ...

什么是正确的synthax?此外,是否可以像这样简化?

 allMyClass(fun) ->
    _.map listOfMyClassObjects, obj[fun]()

 allMyClass(show())

更新

根据Thilo的回答,函数调用中存在语法错误。但是,在地图迭代结果上调用函数时出现了错误。工作版本是:

allMyClass = (fun) ->
  _.map listOfMyClassObjects, (obj) -> fun(obj)

如果将类方法传递给allMyClass函数的版本较短,仍然会徘徊。

UPDATE2:

可以这样简化:

allMyClass = (fun) ->
  _.map listOfMyclassObjects, (obj) -> obj[fun]()

allMyClass("show")

将参数传递给fun将需要传递更多参数。

1 个答案:

答案 0 :(得分:2)

您的意思是定义一个函数

allMyClass = (fun) ->
   _.map listOfMyClassObjects, fun(obj)

或方法

allMyClass : (fun) ->
   _.map listOfMyClassObjects, fun(obj)

如果没有=:,您只需拨打allMyClass