- 2007年12月18日 10:40
- Tips
街がにぎやかなのが逆に寂しい今日この頃、
皆さんいかがお過ごしでしょうかー。
ぢゃぃです。
setTimeoutで少しハマったのでメモー
help等にドキュメント化されてないことで有名ですが、
setTimeout便利です。
機能としては、
一定間隔で関数を呼び続けるsetIntereval()に対し、
一度だけ呼び出されて消えちゃうのがsetTimeout()。
ちょっと間隔を空けて、何かを呼びたいときに便利。
setIntervalでも同様のことができるけど、clearIntervalしなくてよい分便利。
使用法(書き方)は、setInterval()と同じ。
基本的な使い方は
setTimeout (objectReference:Object, methodName:String, delay:Number [, arg1:Object, arg2, ..., argN]) : Number
setTimeout (functionReference:Object, delay:Number [, arg1:Object, arg2, ..., argN]) : Number
ただし、この二つには決定的な違いがある。
呼び出されるfunctionのスコープが違うのです。
例(_rootの1フレに以下のコードを書くと)
this.clearIdA=setTimeout(funcA,1000)
this.clearIdB=setTimeout(this,"funcB",1000)
function funcA(){
trace("funcA_"+this)
}
function funcB(){
trace("funcB"+this)
}
出力funcA_undefined
出力funcB__level0
呼ばれる前に消したい時は、
clearTimeout(clearId)
で今回、ハマったのはここではなく、setTimeoutをクラス内で使おうとした時、エラーが帰ってきます。
基本的にsetIntervalと全く同じ書き方で、すべて大丈夫だと言う認識だったので焦りました。
おそらく、setTimeoutが toplevel.asに書き込まれてないからだと思われます。
解決法としては、
toplevel.asに書き込むか、_global.setTimeout()、_global.clearTimeout()とパスを明確に指定しておく必要があります。
fumiononaka.comに書かれてました
http://www.fumiononaka.com/TechNotes/Flash/FN0512001.html
wikiも参考までに、、。こちら
- Newer: ObjectDumper
- Older: 自己紹介~