この2日間、慶事が 2件あり、昨日は金沢へと出かけた。その道すがらオライリーの "JavaScript 第5版" を読んでいて、キーワード this の処理についてふと疑問が。
<script type="text/javascript"> function Alpha() { this.value = "It's Alpha."; this.func = function() { return this.value; } } function Beta( obj ) { this.value = "It's Beta."; this.func = obj.func; } var objAlpha = new Alpha(); var objBeta = new Beta( objAlpha ); alert( objBeta.func() ); </script>
以上のようなコードを実施した場合、alert() で表示されるのはオブジェクト Alpha の value か Beta のそれか。今までは "It's Alpha." になる、と思い込んでいたのだが、よく考えてみればオブジェクト Beta の this を使っているのだから "It's Beta." が正解だ。イベントハンドラで this がハンドラを持つオブジェクトになるのは call() か apply() を使っているのかとも思っていたのだが、イベントが発生するオブジェクトのメソッドとして機能させるのだから、this は自ずとイベント発生オブジェクトになるのだ(実際内部でどのような処理が行われているのかは知らない)。