我无法理解如何传递带参数的匿名函数。这是我的情况:
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
将需要传递更多参数。
答案 0 :(得分:2)
您的意思是定义一个函数
allMyClass = (fun) ->
_.map listOfMyClassObjects, fun(obj)
或方法
allMyClass : (fun) ->
_.map listOfMyClassObjects, fun(obj)
如果没有=
或:
,您只需拨打allMyClass
。