2

我正在尝试在一个类中执行 setInterval,下面的代码可以正常工作,因为在创建汽车时会定期调用对其 updatePosition 的调用。

问题是我无法在 setInterval“范围”中获取 @currentSpeed 变量的值。相反,当间隔调用 updatePosition 函数时,我在 console.log 中得到“更新位置:速度:未定义”。

当我调用加速()函数(在我按下加速按钮时调用)它返回预期的@currentSpeed 值

如何在 setInterval 范围内从 @currentSpeed 获取值?

这是我的代码的相关部分:

class Car
    constructor: () ->    
        @currentSpeed = 0

        intervalMs = 1000
        @.setUpdatePositionInterval(intervalMs)

    setUpdatePositionInterval: (intervalMs) ->
        setInterval (do => @updatePosition ), intervalMs

    updatePosition: () ->
        # below logs: "Updating position: Speed: undefined"
        console.log("Updating position: Speed: #{@currentSpeed}")

    accelerate: () ->
        #below logs the expected value of @currentSpeed
        console.log "ACCELERATING! CurrentSpeed: #{@currentSpeed}"
4

2 回答 2

3
setInterval (=> @updatePosition()), intervalMs
于 2012-06-16T01:04:26.300 回答
2

创建回调没有意义do => @updatePosition——因为这会创建一个函数 ( =>),该函数 () 会立即执行(由于do关键字)并返回该函数@updatePosition。因此,您可以将其简化为@updatePosition.

在不同的位置需要粗箭头: updatePosition() 需要访问当前实例,以便检索 @currentSpeed 的值 - 但由于您无法确保始终在正确的上下文中调用此函数,您需要使用粗箭头将其绑定到此函数:

setUpdatePositionInterval: (intervalMs) ->
    setInterval @updatePosition, intervalMs

updatePosition: () =>
    console.log("Updating position: Speed: #{@currentSpeed}")
于 2012-06-16T01:01:22.033 回答