繁体   English   中英

实例变量变为未定义 - CoffeeScript

[英]Instance variable becomes undefined - CoffeeScript

class Game

  foo: null

  play: ->

    @foo = 2
    @animate()

  animate: ->

    requestAnimationFrame( @animate, 1000 )
    console.log('foo = ', @foo)


$ ->
  game = null

  init = ->

    game = new Game()
    game.play()

  init()

Game中animate方法的登录产生:

foo = 2

foo =未定义

所以foo在第一次调用动画时是2,然后是未定义的。 有人可以解释为什么以及如何解决这个问题。 任何帮助深表感谢。

当你调用setInterval ,上下文丢失,第二次@window 你需要脂肪箭头的方法来保持适当的this

animate: =>

您可以按如下方式定义animate

animate: ->
  callback = (=> @animate())
  requestAnimationFrame(callback, 1000 )
  console.log('foo = ', @foo)

这里的技术是获得绑定方法。 @animate本身是未绑定的 ,但是(=> @animate())是它的绑定版本。

如果您使用UnderscoreJS,您可以获得类似的结果,如下所示:

animate: ->
  callback = _.bind(@animate, @)
  requestAnimationFrame(callback, 1000 )
  console.log('foo = ', @foo)

如果您使用的是更高版本的JavaScript,则可以执行以下操作:

animate: ->
  callback = @animate.bind(@)
  requestAnimationFrame(callback, 1000 )
  console.log('foo = ', @foo)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM