Javascript bind函数和typescript中的此函数
我想实现一个简单的上下文绑定,但它在TypeScript中不起作用。 以下是我的代码:Javascript bind函数和typescript中的此函数,javascript,typescript,Javascript,Typescript,我想实现一个简单的上下文绑定,但它在TypeScript中不起作用。 以下是我的代码: class Engine { // some code... spriteController(sprite: Sprite, callbackfn: (ctx: CanvasRenderingContext2D) => void) { callbackfn.bind(new SpriteController(sprite), [this._ctx]); }
class Engine {
// some code...
spriteController(sprite: Sprite, callbackfn: (ctx: CanvasRenderingContext2D) => void) {
callbackfn.bind(new SpriteController(sprite), [this._ctx]);
}
// code again ...
}
如果我想在另一个文件中使用spriteController方法,如下所示:
engine.spriteController(sprite, function(ctx) {
this.moveRight() // access to the spriteController class
})
我希望能够在回调中使用SpriteController类在JS中,第一个参数(在bind()调用中)将“this”绑定到给定的对象。但在TypeScript中,从function.bind创建的函数始终保留“this”
如何在TypeScript中实现这一点?绑定时,它将返回绑定函数,您必须更新变量宽度
callbackfn=callbackfn.bind(…)
:
JavaScript在这里:
var Sprite=(函数(){
函数精灵(名称){
this.name=名称;
}
返回精灵;
})();
变量SpriteController=(函数(){
功能精灵控制器(精灵){
this.sprite=精灵;
}
回程控制器;
})();
变量引擎=(函数(){
函数引擎(){
}
Engine.prototype.spriteController=函数(sprite,callbackfn){
callbackfn=callbackfn.bind(新的SpriteController(sprite),[this.\u ctx])
callbackfn()
};
返回引擎;
})();
var e=新发动机();
var s=新雪碧(“测试”);
var cb=功能(ctx){
警报(this.sprite.name);
};
e、 spriteController(s,cb)代码>我尝试过,但它不起作用。我在文档中读到,从function.bind创建的函数总是保留“this”……在再次阅读之后,我必须承认,我不确定是否理解了您的答案correctly@SebBizeul你能重新解释一下你的问题吗?好的,对不起!方法spriteController在引擎类中。当我在程序的不同部分使用它时,我想在SpriteController类上设置“this”。这就是为什么我要调用‘bind(新SpriteController)’。但事实并非如此work@SebBizeul答案可能不是你想要的,我更新了。如果可以的话,请你再解释一下你想做什么?
class Engine {
spriteController(sprite: Sprite, callbackfn: (ctx: CanvasRenderingContext2D) => void) {
let callbackfnBinded = callbackfn.bind(new SpriteController(sprite), [this._ctx])
callbackfnBinded()
}
}