• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[JS]setTimeoutでクラス関数を使いたい)

[JS]setTimeoutでクラス関数を使いたい

このQ&Aのポイント
  • 特定のクラスの関数を実行する方法がわからない場合、setTimeoutを使用して待機してから実行することが一般的です。
  • グローバル変数を使用する場合、setTimeout内で関数を呼び出す方法がありますが、クラス関数を使用する場合には注意が必要です。
  • クラス関数を再呼び出す場合は、thisを使用してメソッドを参照することで解決することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

setTimeout関数は setTimeout呼出し後、他の処理に関係なく、指定した時間後に指定した関数を実行する よ 最初のコードが 0 1 2 done になる保証はないわ 何かの原因で console.log(counter); が遅延した場合 0 0 2 done なんていう風になる可能性もあるの それはおいといて setTimeout(this.method,10) で呼び出された2回目のfunction内では、 thisはページ全体を指してしまうので この記述だとif文のthis.counterがundefinedになって doneの方に飛んでしまうわね なので、関数内部ではthisで指定してはいけないわ 次のようにすればOK ・・・なはず(動作確認していないけど) まあ、setTimeoutスレッド問題はむししているけど function test(){ var o = this; o.counter = 0; o.max = 3; o.method = function(){ if ( o.counter < o.max ) { timerId = setTimeout(o.method, 10 ); console.log(this.counter); o.counter++; } else { console.log("done"); } } }

palayo
質問者

お礼

なるほど~。とても参考になりました!! setTimeoutは実際には一定間隔でループさせて 擬似的にwaitさせたいだけなので、 順番の維持とかは影響ないです。 ありがとうございました!!

その他の回答 (2)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

#2です。 ちょっと訂正。 if(--n>0)   ↓ if(n-->0) にしとかないとwaitが違ってしまうかも。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

methodの呼び出しはすでに回答がありますが、 >擬似的にwaitさせたいだけなので とのことですので、再呼び出しにこんな方法もあるかと… var delay = function(n, func){   (function(){     if(--n>0)       setTimeout(arguments.callee, 10);     else       if(func && typeof func==="function") func();   })(); } delay(300, function(){alert("hoge");}); delay(200, function(){console.log("done200");}); delay(100, function(){console.log("done100");}); // 結果は順に //done100 (console) //done200 (console) //hoge  (alert) delay(n, func)の nは繰り返し回数、 funcは経過後のコールバック

関連するQ&A