gpt4 book ai didi

javascript - Coffeescript '@' 或函数和类中的 this

转载 作者:行者123 更新时间:2023-11-30 13:15:10 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com