[英]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.