Coffeescript计时器和'this'指针回调

Lar*_*rry 6 coffeescript

我遇到浏览器认为"这个"的问题.在下面的示例中,在abc上调用pingMe()将等待1秒,然后浏览器将说Object DOMWindow没有方法'func'.它不是将'this'解析为类ABC(abc)的实例,而是解析为DOMWindow,就好像没有涉及对象一样.我显然不理解setTimeout如何处理回调范围.任何建议如何让这个回调成功?

class ABC
  @func = null

  constructor: (func) ->
    @func = func

  pingMe: ->
    setTimeout(doPing, 1000)

  doPing = ->
    @func()

abc = new ABC ->
  alert "HI"
abc.pingMe()
Run Code Online (Sandbox Code Playgroud)

Rei*_*cke 10

我得到了这段代码.

class ABC
  @func = null

  constructor: (func) ->
    @func = func

  pingMe: ->
    setTimeout =>
     @doPing()
    , 1000

  doPing: ->
    @func()

abc = new ABC ->
  alert "HI"
abc.pingMe()
Run Code Online (Sandbox Code Playgroud)

您的doPing方法已定义doPing = ->,而其他人都使用name: ->,我改变了这种方式.pingMe用于=>创建一个未命名的函数,并@doPing绑定this到该函数.

不确定这是否正确,我很少使用JavaScript.但我希望它可以给你一个进一步观察的方向.