javascript - 评估 'this.batman()' 时,未定义不是一个函数

标签 javascript coffeescript box2dweb

我正在尝试使用 Coffeescript 和 box2dweb 来创建一个简单的游戏。设置物理效果很好并且更新也很好,但是当尝试在更新循环中调用我自己的函数时,我收到此错误“未定义不是函数(评估 this.batman())” (batman 是函数名称)。我在运行之前将其编译为 javascript。 这是我第一次使用 CoffeeScript,所以我可能做了一些愚蠢的事情。

这是我的代码:

root = exports ? this
root.world = null

class Game
    class Game
    canvasHeight: 450
    canvasWidth: 800
    canvas: null
    drawingContext: null

    constructor: ->
        @createCanvas()
        @resizeCanvas()
        @createDrawingContext()
        @initPhysics()

    createCanvas: ->
        @canvas = document.createElement 'canvas'
        document.body.appendChild @canvas

    resizeCanvas: ->
        @canvas.height = @canvasHeight
        @canvas.width = @canvasWidth

    createDrawingContext: ->
        @drawingContext = @canvas.getContext '2d'

    initPhysics: ->
        #physics setup removed for brevity

        window.setInterval(@update, 1000 / 60)


    batman: ->
        alert "whatever"

    update: ->
        root.world.Step(1 / 60,  10, 10)
        root.world.DrawDebugData()
        root.world.ClearForces()
        @batman()


    window.Game = Game

最佳答案

initPhysics中,您需要bind @updatethis:

window.setInterval(@update.bind(this), 1000/60)

因为否则当调用 update 时,this 上下文就会丢失。

关于javascript - 评估 'this.batman()' 时,未定义不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17689561/

相关文章:

Javascript RegEx 检测浏览器

javascript - 将 Fuelux Datagrid 列单元格设置为对象集合中的字符串

javascript - jQuery 绑定(bind)事件处理程序

javascript - 亚马逊 AWS 错误 : Missing credentials in config node. js

javascript - Console.log 使用 box2d 记录对象速度

javascript - 在 pixi.js 中渲染来自 box2dweb 的旋转矩形

javascript - Spring mvc + Thymeleaf : dealing with complex form

Javascript引用和内存分配的区别

javascript - 创建包含 HTML 的函数