在 coffeescript 中有以下类:
class Canvas
constructor: (finder) ->
@canvas = $(finder)
@mouse_down()
mouse_down: ->
@canvas.mousedown (e) ->
mouse_x = e.pageX - @offsetLeft
### ... ###
@redraw()
redraw: ->
### ... ###
问题是在mousedown
函数中调用类对象redraw
方法。最好的解决方案是什么?我只发现:
mouse_down: ->
@canvas.mousedown (e) =>
mouse_x = e.pageX - @canvas[0].offsetLeft
### ... ###
@redraw()
最佳答案
检查一下:
class Canvas
constructor: (finder) ->
@canvas = $(finder)
@mouse_down()
mouse_down: ->
redrawCallback = @redraw
@canvas.mousedown (e) ->
mouse_x = e.pageX - @offsetLeft
### ... ###
redrawCallback()
redraw: ->
### ... ###
如果重绘以任何方式引用@(Canvas 类),那么这样做会更好(无论如何它更安全):
class Canvas
constructor: (finder) ->
@canvas = $(finder)
@mouse_down()
mouse_down: ->
redrawCallback = => @redraw()
@canvas.mousedown (e) ->
mouse_x = e.pageX - @offsetLeft
### ... ###
redrawCallback()
redraw: ->
### ... ###
附言。虽然这是一个品味问题,但我相信驼峰式大小写比下划线更适合方法名称。
关于javascript - Coffeescript '@' 或函数和类中的 this,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12282737/