CoffeeScriptとかJavaScript書く時、あるはずのプロパティが呼べなかったりして=>(fat arrow)とかvar that = this;とか使ってたんだけど使うタイミングが良くわかってなかった。
class Obj constructor : (@prop)-> method :() -> alert "1 : #{@prop}" @doCallback? -> alert "2 : #{@prop}" @doCallback? => alert "3 : #{@prop}" doCallback : (callback) -> callback() obj = new Obj "test" # メソッド呼び出しなのでthisはobj自身を指す # 1 : test # 2 : undefined # 3 : test obj.method() # 関数呼び出しになるのでthisはグローバルを指す func = obj.method # 1 : undefined # 2 : 実行されない # 3 : 実行されない func() # apply # 1 : test # 2 : undefined # 3 : test func.apply obj
コールバックとかで無名関数を実行するときに、無名関数の中のthisはグローバルになる。