※ ChatGPTを利用し、要約された質問です(原文:[JS]setTimeoutでクラス関数を使いたい)
[JS]setTimeoutでクラス関数を使いたい
このQ&Aのポイント
特定のクラスの関数を実行する方法がわからない場合、setTimeoutを使用して待機してから実行することが一般的です。
グローバル変数を使用する場合、setTimeout内で関数を呼び出す方法がありますが、クラス関数を使用する場合には注意が必要です。
クラス関数を再呼び出す場合は、thisを使用してメソッドを参照することで解決することができます。
[JS]setTimeoutでクラス関数を使いたい
他の処理を待ってから、別の処理を実施したい場合に、setTimeoutを使用するのが
一般的だと思いますが、特定のクラスの関数を実行する方法がよくわかりません。
グローバル変数を使用する場合には以下で動きます。
※待機の部分は、問題を簡略化するため今回は3回実行完了まで、としています。
counter = 0;
max = 3;
method();
function method(){
if ( counter < max ) {
timerId = setTimeout(method, 10 );
console.log(counter);
counter++;
} else {
console.log("done");
}
}
出力は以下のとおり。
0
1
2
done
methodやcounter, maxなどを隠蔽するため、クラス関数を作り、以下のようにしました。
a = new test();
a.method();
function test(){
this.counter = 0;
this.max = 3;
this.method = function(){
if ( this.counter < this.max ) {
timerId = setTimeout(this.method, 10 );
console.log(this.counter);
this.counter++;
} else {
console.log("done");
}
}
}
出力は以下のようになってしまい、意図したように実行できていません。
0
done
このような場合、どのようにしてクラス関数を再呼び出しするのでしょうか。
お礼
なるほど~。とても参考になりました!! setTimeoutは実際には一定間隔でループさせて 擬似的にwaitさせたいだけなので、 順番の維持とかは影響ないです。 ありがとうございました!!