带有Typescript

时间:2018-07-20 19:08:34

标签: node.js typescript ionic2

我在带有TypeScript的nodeJS中遇到此问题。我已经测试过是否带有 this。

  

this.funktion2();              ^

     

TypeError:this.funktion2不是函数

     

funktion1(); //案例#two       ^

     

ReferenceError:funktion1未定义

这是我的示例代码:

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();

我该如何解决它或提供解决方法?

感谢所有帮助。

2 个答案:

答案 0 :(得分:-1)

尝试以下示例

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中,如果使用函数,则无法访问类上下文this。该函数创建一个新的上下文,因此一个新的this

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

要访问当前上下文:

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

答案 1 :(得分:-1)

示例中我犯了一个错误

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();

但是,如果有人对此有更好的解决方法,我将非常高兴。