0

我不知道如何传递一个带参数的匿名函数。这是我的情况:

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
  ...

什么是正确的合成器?另外,可以这样简化吗?

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

 allMyClass(show())

更新:

根据 Thilo 的回答,函数调用中存在语法错误。而且,在 map 迭代结果上调用函数时出错。工作版本是这样的:

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

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

更新2:

可以这样简化:

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

allMyClass("show")

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

4

1 回答 1

2

你的意思是定义一个函数

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

或方法

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

没有=or:你只是在打电话allMyClass

于 2012-07-22T10:14:05.317 回答