在coffeescript中有以下课程:
class Canvas
constructor: (finder) ->
@canvas = $(finder)
@mouse_down()
mouse_down: ->
@canvas.mousedown (e) ->
mouse_x = e.pageX - @offsetLeft
### ... ###
@redraw()
redraw: ->
### ... ###
问题是在redraw
函数中调用类对象mousedown
方法。这样做的最佳解决方案是什么?我发现只有:
mouse_down: ->
@canvas.mousedown (e) =>
mouse_x = e.pageX - @canvas[0].offsetLeft
### ... ###
@redraw()
答案 0 :(得分:2)
检查出来:
class Canvas
constructor: (finder) ->
@canvas = $(finder)
@mouse_down()
mouse_down: ->
redrawCallback = @redraw
@canvas.mousedown (e) ->
mouse_x = e.pageX - @offsetLeft
### ... ###
redrawCallback()
redraw: ->
### ... ###
如果redraw无论如何都指向@(Canvas类),那就更好了(无论如何都更安全):
class Canvas
constructor: (finder) ->
@canvas = $(finder)
@mouse_down()
mouse_down: ->
redrawCallback = => @redraw()
@canvas.mousedown (e) ->
mouse_x = e.pageX - @offsetLeft
### ... ###
redrawCallback()
redraw: ->
### ... ###
PS。虽然这是一个品味问题,但我相信骆驼的情况会比方法名称更好地匹配而不是强调。
答案 1 :(得分:1)
您找到了更好的解决方案。但如果你想要,你可以这样写:
mouse_down: ->
self = @
@canvas.mousedown (e) ->
mouse_x = e.pageX - self.canvas[0].offsetLeft
### ... ###
self.redraw()