Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript bind函数和typescript中的此函数_Javascript_Typescript - Fatal编程技术网

Javascript bind函数和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]); }

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

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()
    }
}