如何使用CoffeeScript';s";“做”;属性为;这是什么;?

如何使用CoffeeScript';s";“做”;属性为;这是什么;?,coffeescript,Coffeescript,CoffeeScript有一个方便的do语句来保存闭包中的变量。但是如何使用do保留此的属性?这似乎总是失败 示例:在类方法中,我希望使用jQuery将事件处理程序附加到HTML元素。处理程序应使用参数调用同一类的另一个方法。现在如果我写: foo = getBar() $('div').click -> @handler foo 这显然不起作用,因为函数将在没有名为handler的方法的不同上下文中执行。但是,如果我使用do并编写以下代码: foo = getBar() do (@ha

CoffeeScript有一个方便的
do
语句来保存闭包中的变量。但是如何使用
do
保留
的属性?这似乎总是失败

示例:在类方法中,我希望使用jQuery将事件处理程序附加到HTML元素。处理程序应使用参数调用同一类的另一个方法。现在如果我写:

foo = getBar()
$('div').click -> @handler foo
这显然不起作用,因为函数将在没有名为
handler
的方法的不同上下文中执行。但是,如果我使用
do
并编写以下代码:

foo = getBar()
do (@handler, foo) ->
  $('div').click -> @handler foo
这也将失败,因为@handler转换为this.handler,而this.handler不能通过闭包。解决这个问题的优雅方法是什么?

尝试使用(等号)

或者,在回调之前获取对处理程序的引用

cbHandler = @handler
foo = getBar()
$('div').click -> cbHandler foo

do
不是用于在闭包中保留变量,
do
是用于在您希望对变量求值时强制求值变量,而不仅仅是拖动共享引用:
cbHandler = @handler
foo = getBar()
$('div').click -> cbHandler foo