我在带有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();
我该如何解决它或提供解决方法?
感谢所有帮助。
答案 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();
但是,如果有人对此有更好的解决方法,我将非常高兴。