我是打字稿的新手,我有一个问题。我写了以下代码:
class FunctionMachine {
name: string;
constructor(_name: string) {
this.name = _name;
}
sayName() {
console.log(this.name);
}
sayNameWithCallback(callback){
console.log(this.name);
callback();
}
}
var fmHans = new FunctionMachine("Hans");
var fmOle = new FunctionMachine("Ole");
fmOle.sayName();
fmHans.sayNameWithCallback(fmOle.sayName);
我希望它能在跑步时写出“Ole,Hans,Ole”。相反,它返回“Ole,Hans”。
看起来像“这个”。当我使用fmOle.sayName作为参数时,指的是我所期望的东西。
TypeScript不支持,还是需要重写代码?
答案 0 :(得分:1)
在这种情况下,您需要保护您的范围。 Ryan Cavanaugh之前曾提到过一个技巧,你在课堂上使用胖箭来做这个:
class FunctionMachine {
name: string;
constructor(_name: string) {
this.name = _name;
}
sayName = () => { // <-- This is the clever bit
console.log(this.name);
}
sayNameWithCallback(callback) {
this.sayName();
callback();
}
}
var fmHans = new FunctionMachine("Hans");
var fmOle = new FunctionMachine("Ole");
console.log('First Call');
fmOle.sayName();
console.log('Second Call');
fmHans.sayNameWithCallback(fmOle.sayName);