JavaScript中的对象变量

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.timesDelayedthis.maxDelay?我误解了在这里制作物品的方法吗?

mu *_*ort 5

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/