Javascript coffee脚本构造函数中的绑定事件

Javascript coffee脚本构造函数中的绑定事件,javascript,coffeescript,Javascript,Coffeescript,如果我有课 class Control constructor: (@canvas, @control) -> @control.on('keyup change', -> update(@canvas) ) 当我更改控件时,会触发更改事件,并出现错误$canvas未定义 但是,如果代码更改为 class Control constructor: (canvas, @control) -> @control.on('keyup ch

如果我有课

class Control
  constructor: (@canvas, @control) ->
    @control.on('keyup change', ->
      update(@canvas)
    )
当我更改控件时,会触发更改事件,并出现错误
$canvas未定义

但是,如果代码更改为

class Control
  constructor: (canvas, @control) ->
    @control.on('keyup change', ->
      update(canvas)
    )
一切正常


这是为什么呢?

这是意料之中的事。在构造函数参数上使用
@
会自动在构造函数中设置
this.canvas=canvas
。事件处理程序的上下文(
this
)与类不同,除非您使用“胖箭头”
=>
明确限定它的范围

class Control
  constructor: (@canvas, @control) ->
    @control.on('keyup change', => # notice fat arrow
      update(@canvas)
    )
在您的工作示例中,您通过不将
canvas
附加到当前上下文来避免问题