Javascript Coffescript'@';在函数和类中也是如此
在coffeescript中学习以下课程:Javascript Coffescript'@';在函数和类中也是如此,javascript,coffeescript,Javascript,Coffeescript,在coffeescript中学习以下课程: class Canvas constructor: (finder) -> @canvas = $(finder) @mouse_down() mouse_down: -> @canvas.mousedown (e) -> mouse_x = e.pageX - @offsetLeft ### ... ### @redraw() redraw: ->
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()
你找到了更好的解决办法。但如果你愿意,你可以这样写:
mouse_down: ->
self = @
@canvas.mousedown (e) ->
mouse_x = e.pageX - self.canvas[0].offsetLeft
### ... ###
self.redraw()
看看这个:
class Canvas
constructor: (finder) ->
@canvas = $(finder)
@mouse_down()
mouse_down: ->
redrawCallback = @redraw
@canvas.mousedown (e) ->
mouse_x = e.pageX - @offsetLeft
### ... ###
redrawCallback()
redraw: ->
### ... ###
如果redraw以任何方式引用@(画布类),请这样做更好(无论如何,这样做更安全):
另外,虽然这是一个品味问题,但我相信驼峰大小写比下划线更适合方法名。祝贺您——您找到了解决方案!
=>
将函数绑定到@
(或此
)。@LinusGThiel,这是唯一的解决方案吗?它看起来并不漂亮。总是有,但这正是=>
的用例。你特别不喜欢它的什么?@LinusGThiel,@canvas[0]。offsetLeft而不是这个。offsetLeft。@tiktak好的,我理解你的意思。是的,在这里你可以使用@offsetLeft
。
class Canvas
constructor: (finder) ->
@canvas = $(finder)
@mouse_down()
mouse_down: ->
redrawCallback = => @redraw()
@canvas.mousedown (e) ->
mouse_x = e.pageX - @offsetLeft
### ... ###
redrawCallback()
redraw: ->
### ... ###