Typescript 通过类传递函数

Typescript 通过类传递函数,typescript,Typescript,我是打字新手,我有个问题。我编写了以下代码: class FunctionMachine { name: string; constructor(_name: string) { this.name = _name; } sayName() { console.log(this.name); } sayNameWithCallback(callback){ console.log(this.name); callback(); } } var fmHans =

我是打字新手,我有个问题。我编写了以下代码:

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”

它看起来像“this.”指的不是我使用fmOle.sayName作为参数时所期望的内容


TypeScript不支持这一点,还是我需要重写代码?

在这种情况下,您需要保护您的作用域。瑞安·卡瓦诺(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);
类函数机{
名称:字符串;
构造函数(_name:string){
this.name=\u name;
} 

sayName=()=>{//Hi,谢谢你的回复。它的作用就像一个符咒:)你能解释一下胖箭头是什么吗?它看起来像是lambda表达式,我从C#那里知道的。它们的主要目的是保留作用域-你可以用它们作为快速创建函数的简写。