javascript第3版を読んでから、WEB+DB PRESS Vol.35のAjax特集など読み返していたら、オブジェクトのメソッドをイベントハンドラにするっていうところでちょっと分からないことがあった。
function Human(name){
this.name = name;
}
Human.prototype = {
sayMyName: function(){
alert('My name is' + this.name + '.');
}
};
var kzfm = new Human('kzfmix');
setTimeout(kzfm.sayMyName, 1000);
はだめで、
setTimeout(function(){kzfm.sayMyName()}, 1000);
とする必要があると。一緒に乗ってたコンストラクタでやる例をみても、あー、クロージャなんだなってことで納得したんだけど、クロージャ使わない最初の例だとthisって何を指すんだろうと気になったので調べてみた(googleで)。
くーすーって美味しいよね クロージャとthisスコープ
このコードがなぜいけないかというと、イベントに渡された関数オブジェクトに含まれるthisが参照するのは、インスタンスのメソッドではないからだ。何をさしているかというとこの場合、thisはelementノードをさしている。
ふむー。なるほど。しかしjavascriptの場合ダンプってどうやるのかは分からずじまい。perlのData::Dumperみたいのはないんだろうか。
と思って、debug javascript dumperで検索かけたらビンゴ。はてなでも質問されてた
あとでちょっと使ってみる。