我是打字稿的新手,但我认为这不仅仅是一个javascript问题 - 具体来说,我对如何完成某些事情缺乏了解。
我需要在回调中设置一个类级变量,我不知道如何去做。在我的打字稿类中,我有一个带有胖箭头功能的方法。它调用一个使用回调函数发出ajax请求的对象。
在该回调中,我想在类上设置一个值。简而言之,这就是我所拥有的:
class MyClass extends SomeOtherClass {
protected entity = new Entity();
protected getToolbar() {
toolbarbuttons.push({
title: 'hello',
onClick: () => {
outsideService.makeAjaxCall(
{
url: 'somewhere_in_cyberspace'
},
function (response) {
this.entity.name = response.Name;
}
);
}
});
}
}
该代码不能正常工作,因为在回调当然'this'指的是Window而不是我的类。
很公平,我试图在我的onClick处理程序之前按照_that = this
的方式做一些事情,在处理程序退出之后我无法将响应值变为'stick',在某种意义上说后续方法this.entity.name
不是回调设置的方法吗?我可以在这做什么或者我错过了什么?
答案 0 :(得分:1)
第二个功能也需要是箭头功能:
SELECT
COUNT(*) AS gas_pulse_count,
FROM_UNIXTIME(pulse_time - MOD(pulse_time, 5 * 60)) from_time,
FROM_UNIXTIME((pulse_time - MOD(pulse_time, 5 * 60)) + 5 * 60) to_time
FROM
gas_pulse
GROUP BY from_time
这编译成:
class MyClass extends SomeOtherClass {
protected entity = new Entity();
protected getToolbar() {
toolbarbuttons.push({
title: 'hello',
onClick: () => {
outsideService.makeAjaxCall({
url: 'somewhere_in_cyberspace'
}, (response) => {
this.entity.name = response.Name;
});
}
});
}
}
正如您所见,typescript将箭头函数转换为常规匿名函数,但它保存了一个引用var MyClass = (function (_super) {
__extends(MyClass, _super);
function MyClass() {
_super.apply(this, arguments);
this.entity = new Entity();
}
MyClass.prototype.getToolbar = function () {
var _this = this;
toolbarbuttons.push({
title: 'hello',
onClick: function () {
outsideService.makeAjaxCall({
url: 'somewhere_in_cyberspace'
}, function (response) {
_this.entity.name = response.Name;
});
}
});
};
return MyClass;
}(SomeOtherClass));
,然后在最内部函数中使用。