本日ハマったこと。
class World
update:->
requestAnimationFrame @update
@render
render:->
# hoge
これで動くと思ったけど、全然動かない。
CoffeeScript内の@もといthisの扱いにはマジで注意が必要ですね。
class World
update:->
requestAnimationFrame arguments.callee
@render
render:->
# hoge
こうしてみた。
うごかない。
ちなみに、arguments.callee で呼び出している関数は、グローバルオブジェクトになるのかな。怖い怖い。一回目は通るけど、二回目は通らないってそういうことなのか?。
でも、一個目のやつが動かないのは説明がつかない。
うーむおかしい。
->と=>の違い
class World
update:=>
requestAnimationFrame @update
@render
render:=>
# hoge
結果的に、こうすることで解決しました。
どうやら、requestAnimationFrameはグローバルオブジェクトなので、引数の関数を呼ばれると、内部のthisはwindowを指すことになってしまう模様。
つまりは、Worldクラスのthisをbindしてあげないと、ちゃんと動かないっぽいです。
coffeeScriptの=>
はthisを関数にBindしてくれて、ちゃんとしたWorldのthisを使えるようにしてくれるやつです。
これで、->
と=>
の使い分けられる人類に一歩近づきました。
ちかれた。