我正在尝试在类中执行setInterval,并且下面的代码工作正常,因为在创建汽车时会定期调用其updatePosition。
问题是我无法在setInterval“scope”中获取@currentSpeed变量的值。相反,当我按照时间间隔调用updatePosition函数时,我的console.log中会出现“正在更新位置:速度:未定义”。
当我调用accele()函数(随时调用加速按钮时调用)它会返回预期的@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}"
答案 0 :(得分:3)
setInterval (=> @updatePosition()), intervalMs
答案 1 :(得分:2)
执行do => @updatePosition
创建回调没有意义 - 因为这会创建一个立即执行的函数(=>
)(由于do
关键字)并返回函数@updatePosition
。因此,您可以将其简化为@updatePosition
。
在另一个位置需要胖箭头:updatePosition()需要访问当前实例,以便检索@currentSpeed的值 - 但是由于您无法确保始终在正确的上下文中调用此函数,你需要使用胖箭头将它绑定到这个函数:
setUpdatePositionInterval: (intervalMs) ->
setInterval @updatePosition, intervalMs
updatePosition: () =>
console.log("Updating position: Speed: #{@currentSpeed}")