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

标签 javascript coffeescript

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

相关文章:

javascript - Backbone DOM 元素的 Backbone 事件未触发

在 Node 0.5.10-pre 下抑制了 CoffeeScript 编译器错误

javascript - 如何使 Accordion 菜单中的单个主菜单处于事件状态(具有颜色)-jquery,javascript

javascript - Highcharts 饼图图例分页错误

javascript - 正在加载并等待 "global" meteor 订阅

javascript - 如何确保控制台对象作为 CoffeeScript 中窗口对象的属性存在

javascript - CoffeeScript:可以重写得更简洁吗?

javascript - 如何使用 jquery 获取所选选项标签的数据源

javascript - 将谷歌地图自动完成预测返回给调用它的方法

javascript - AngularJS - 创建 Controller 之间的区别