thisの実体を決定するロジックがわからない
2007年5月7日
javascriptで、こういうクラスがあったときに
var Human = function(){ this.word = "Hello"; }; Human.prototype.talk = function(){ alert(this.word); };
それを使ってこう書いたときと
var h = new Human; document.getElementById("hoge").onclick = function() { h.talk(); // "Hello"を出力 };
こう書いたときに
var h = new Human; document.getElementById("hoge").onclick = h.talk(); // undefinedを出力
thisの実体が変わりますが
このthisの実体を決定するJSのルールがわかりませぬ。
実装する時に、そこがわからないので
「applyとcallの第一引数で指定した場合は大丈夫」
「オブジェクトを指定して関数を呼んだ場合は大丈夫」
「それ以外は呼び出した要素がthisに入る」
という風に、ほぼ暗記で把握しておりますが・・・。
「applyとcallの第一引数で指定した場合は大丈夫」
「オブジェクトを指定して関数を呼んだ場合は大丈夫」
「それ以外は呼び出した要素がthisに入る」
という風に、ほぼ暗記で把握しておりますが・・・。
thisについてのいいエントリが有ったら
是非、教えて下さい。
是非、教えて下さい。
***追記***
thisはダイナミックスコープの変数で
var宣言したものはレキシカルスコープの変数だったからだというので
なんとなく・概ね・わかったつもりになりました。
心にささるまで理解できたら、別に書こうと思います。
var宣言したものはレキシカルスコープの変数だったからだというので
なんとなく・概ね・わかったつもりになりました。
心にささるまで理解できたら、別に書こうと思います。
参考資料
- 「まるごとJavaScript&Ajax!」の「FlashのActionScriptで関数型風プログラミング」の項目
- Functional Programming