Bri*_*cks 1 javascript settimeout coffeescript
我有以下代码:
WaitModel = ->
timesDelayed = 0
maxDelay = 10
return this
WaitModel.prototype =
wait: ->
console.log 'waiting'
console.log this.timesDelayed, this.maxDelay
if this.timesDelayed >= this.maxDelay
console.log 'running'
this.timesDelayed = 0
else
this.timesDelayed++
setTimeout this.wait, 1000
return
new WaitModel().wait()
Run Code Online (Sandbox Code Playgroud)
我认为这应该产生如下输出:
waiting
0 10
waiting
1 10
...
Run Code Online (Sandbox Code Playgroud)
但它产生的输出如下:
waiting
0 10
waiting
undefined undefined
Run Code Online (Sandbox Code Playgroud)
我在哪里你重置this.timesDelayed和this.maxDelay?我误解了在这里制作物品的方法吗?
jfriend00告诉你你做错了什么.在CoffeeScript中解决此问题的惯用方法是使用=>(胖箭头)来定义您的wait方法.我还de-JavaScripted你的CoffeeScript使它更加惯用:
class WaitModel
constructor: (@timesDelayed = 0, @maxDelay = 10) ->
wait: =>
console.log 'waiting'
console.log @timesDelayed, @maxDelay
if @timesDelayed >= @maxDelay
console.log 'running'
@timesDelayed = 0
else
@timesDelayed++
setTimeout @wait, 1000
new WaitModel().wait()
Run Code Online (Sandbox Code Playgroud)
演示:http://jsfiddle.net/ambiguous/aYFmL/1/