'TypeError: is not a function' in NodeJS with Typescript

'TypeError: is not a function' in NodeJS with Typescript

我在使用 TypeScript 的 nodeJS 中遇到了这个问题。我已经在不使用和使用 this. :

的情况下进行了测试

this.funktion2(); ^

TypeError: this.funktion2 is not a function

funktion1(); //case #two ^

ReferenceError: funktion1 is not defined

这是我的示例代码:

class App
{
  constructor()
  {
    setTimeout(function(){
      console.log('Hier 1');
      this.funktion2();
    }, 2500);

    //I have only one of this cases in use
    this.funktion1(); //case #one
    funktion1();      //case #two
  }

  function funktion1()
  {
    console.log('Funktion 1');
  }

    funktion2()
    {
      console.log('Funktion 2');
    }
}

new App();

我该如何修复它或给出解决方法?

感谢大家的帮助。

尝试以下示例

class App {
  constructor() {
    setTimeout(() => {
      console.log('Hier 1');
      this.funktion2();
    }, 2500);

    this.funktion1(); //case #one
  }

  funktion1() {
    console.log('Funktion 1');
  }

  funktion2(){
    console.log('Funktion 2');
  }
}

new App();

另一件事是,在 setTimeout 中,如果您使用函数,则无法访问 class 上下文 this。该函数创建一个新的上下文,因此一个新的 this

setTimeout(function(){
  console.log('Hier 1');
  this.funktion2();
}, 2500);

要访问当前上下文:

setTimeout(() => {
  console.log('Hier 1');
  this.funktion2();
}, 2500);

这个例子有点小错误

class App
{
  constructor()
  {
    setTimeout(function(){
      console.log('Hier 1');
      //I have only one of this cases in use
      this.funktion2(); //case #one
      funktion2();      //case #two
    }, 2500);
    this.funktion1();// this work
  }

  function funktion1()
  {
    console.log('Funktion 1');
  }

    funktion2()
    {
      console.log('Funktion 2');
    }
}

new App();

但我有一个解决方法,当我想调用 funktion2() 时,这不是很好,但它适用于我的情况:

class App
{
  constructor(b)
  {
    if(b)
    {
      this.funktion1();
      setTimeout(function(){
        console.log('Hier 1');
        new App(false);
      }, 2500);
    }
    else
    {
      this.funktion2();
    }

     //case #one
    //funktion1();      //case #two
  }

  funktion1()
  {
    console.log('Funktion 1');
  }

  funktion2()
  {
    console.log('Funktion 2');
  }
}

new App();

但如果有人有更好的解决办法,我会很高兴。