我不知道如何传递一个带参数的匿名函数。这是我的情况:
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
将需要传递更多的参数。