コールバック関数内のthis
長らくJavaでのサーバーサイドを担当していたのですが、斯く斯く然々あって
JavaScriptによるクライアントサイドを担当することになりました。
ここ1ヶ月強を経て、まぁ初心者を名乗れるくらいにはなったのかなと思っています。
JavaScriptのthis
Javaをやっていた人間からすると、なかなか理解しがたい部分です。
「4つのthis」なんて言われていますが、「呼び出し元オブジェクトがthisにバインドされる」と覚えておけばいいでしょう。
Javaと異なり、「自身のオブジェクト」ではないので注意が必要です。
コールバック内のthis
本題です。
「コールバック内のthisはwindowを指す」という内容をたまに目にするのですが、なんか違うよなーと思ったので。
setTimeout ・ setInterval
例として挙げられるのがsetTimeout・setIntervalなのがよくないですね。
setTimeout・setIntervalはwindowオブジェクトに属しているためです。
まずはオブジェクト生成
var obj = { message:'メッセージ!!', callback:function(){ alert( this.message );} }; obj.callback(); //「メッセージ!!」が表示される
setTimeoutでのコールバック例
setTimeout( obj.callback, 1000 );
// undifinedが表示される
window(global)オブジェクトじゃない例
var obj2 = { emit:function(target){ target.callback();} } obj2.emit(obj); //「メッセージ!!」が表示される
まとめ
thisって難しい