Javascriptのオブジェクトの基本:イベントハンドラとthis

先のログ『Javascriptのオブジェクトの基本:インスタンス化とthis』では、this句について、

インスタンス化されたオブジェクトをさす

と書いた。

とはいえ、Javascriptで頻繁に登場するthis句が「いったい何を指しているの?」ということで悩むことも多い。
特に、イベントハンドラー内でthisが使われているときなど、注意が必要となる。

たとえば、以下のようなサンプルを考えてみる。

var onClickHdlr = function(){ // --- (1)
	document.getElementById('debug1').appendChild(prettyPrint(this));
	// この関数はグローバルスコープ。
};

というイベントハンドラーを用意し、ボタンのonClickイベントで呼び出して、thisをprettyPrint.jsでダンプしてみる。このときの出力(の一部)は以下のようになり、thisはwindowオブジェクトを指す。


次に、以下のサンプルスクリプトで同じことをしてみる。

var handlers = { // --- (2)
	prop1		: "hello",
	onClickHdlr	: function(){ // --- (3)
		document.getElementById('debug1').appendChild(prettyPrint(this));
		// これを含む最小のオブジェクトはhandlers。
	}
};

この場合のダンプ結果は以下となり、thisは、handlersオブジェクトを指す。

これらを見て明らかなように、this句は

イベントハンドラー(関数)を内包する最小のオブジェクトをさす

ということができる。