我对在Typescript中使用类有疑问:
如果我运行此代码(不带类)
var timer = new TaskTimer(1000);
function getData() {
return Date.now();
}
function print1() {
console.log(getData());
}
timer.add({
id: 'job1',
tickInterval: 2,
totalRuns: 0,
callback() {
print1();
}
});
// Start the timer
timer.start();
它完美地工作!但是,如果我尝试只使用类来运行相同的代码,则会抛出错误:
error TS2339: Property 'print1' does not exist on type 'TaskCallback | ITaskOptions | Task | (TaskCallback | ITaskOptions | Task)[]'.
Property 'print1' does not exist on type 'TaskCallback'.
这是代码:
class App {
timer: TaskTimer;
constructor() {
this.timer = new TaskTimer(1000);
}
getData() {
return Date.now();
}
print1() {
console.log(this.getData);
}
print2() {
this.timer.add({
id: 'job1',
tickInterval: 1,
totalRuns: 0,
callback() {
this.print1();
}
});
this.timer.start();
}
}
let app = new App();
app.print2();
第二种情况下我在做什么错?我可能会很累地想不出来,但现在我还是不明白...
答案 0 :(得分:1)
使用object method shorthand定义回调,使其成为unbound function:
callback() {
this.print1();
}
换句话说,从callback
内部开始,this
不一定是类实例,而是任何调用上下文。
如果您将回调定义为绑定函数(fat arrow function),则this
将保留为类实例:
callback: () => {
this.print1();
}
// Or shorthand:
callback: () => this.print1()