gpt4 book ai didi

javascript - typescript 中的绑定(bind)函数和 this

转载 作者:行者123 更新时间:2023-11-30 16:22:50 24 4
gpt4 key购买 nike

我想实现一个简单的上下文绑定(bind),但它在 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”绑定(bind)到给定的对象。但是在 TypeScript 中,从 function.bind 创建的函数总是保留“this”。
如何在 TypeScript 中实现这一点?

最佳答案

绑定(bind)时,它返回绑定(bind)的函数,你必须更新你的可变宽度callbackfn = callbackfn.bind(...):

Documentation link

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

这里是 JavaScript:

var Sprite = (function () {
function Sprite(name) {
this.name = name;
}
return Sprite;
})();
var SpriteController = (function () {
function SpriteController(sprite) {
this.sprite = sprite;
}
return SpriteController;
})();
var Engine = (function () {
function Engine() {
}
Engine.prototype.spriteController = function (sprite, callbackfn) {
callbackfn = callbackfn.bind(new SpriteController(sprite), [this._ctx])
callbackfn()
};
return Engine;
})();
var e = new Engine();
var s = new Sprite("test");
var cb = function (ctx) {
alert(this.sprite.name);
};
e.spriteController(s, cb);

关于javascript - typescript 中的绑定(bind)函数和 this,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34499583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com