在打字稿中绑定函数和 this

Seb*_*eul 6 javascript typescript

我想实现一个简单的上下文绑定,但它在 TypeScript 中不起作用。这是我的一段代码:

class Engine {
    // some code...

    spriteController(sprite: Sprite, callbackfn: (ctx: CanvasRenderingContext2D) => void) {
        callbackfn.bind(new SpriteController(sprite), [this._ctx]);
    }

    // code again ...
}
Run Code Online (Sandbox Code Playgroud)

如果我想在另一个文件中使用 spriteController 方法,如下所示:

engine.spriteController(sprite, function(ctx) {
    this.moveRight() // access to the spriteController class
})
Run Code Online (Sandbox Code Playgroud)

我希望能够在回调中使用 SpriteController 类。
在 JS 中,第一个参数(在 bind() 调用中)将“this”绑定到给定的对象。但是在 TypeScript 中,从 function.bind 创建的函数总是保留“this”。
如何在 TypeScript 中实现这一点?

Cod*_*rPi 5

绑定时,它返回绑定函数,您必须更新变量 width callbackfn = callbackfn.bind(...)

文档链接

class Engine {
    spriteController(sprite: Sprite, callbackfn: (ctx: CanvasRenderingContext2D) => void) {
        let callbackfnBinded = callbackfn.bind(new SpriteController(sprite), [this._ctx])
        callbackfnBinded()
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的 JavaScript:

class Engine {
    spriteController(sprite: Sprite, callbackfn: (ctx: CanvasRenderingContext2D) => void) {
        let callbackfnBinded = callbackfn.bind(new SpriteController(sprite), [this._ctx])
        callbackfnBinded()
    }
}
Run Code Online (Sandbox Code Playgroud)