- 2007-09-11 (火) 18:50
- Javascript
普段適当な処理しか書いたことの無いJavascriptをマジメに書いていて、「this」に戸惑った。
オブジェクトの中でthis使ったら、Pythonのselfみたいに自分のオブジェクトを指すもんだとばかり思ってたよ。
違う場合があるんですね。
イベントやタイマー(setIntervalとかsetTimeoutとか)などで呼び出されると、thisは自分のオブジェクトを指すわけではない。
自分のオブジェクトを使いたいときは事前にthisをローカル変数に保存して利用する。
今回はイベントハンドラじゃなくってタイマーで呼び出して失敗した。
自分メモで動くソースを。
JavaScript:
-
var obj = function () {};
-
obj.prototype = {
-
timer: null,
-
hoge: 'hoge',
-
run: function() {
-
var self = this; // thisを保存しておく
-
var func_ref = function () {
-
alert(self.hoge); // イベントやタイマーで呼ばれるときは、selfを使う
-
}
-
this.timer = setTimeout(func_ref, 1000);
-
}
-
}
-
x = new obj();
-
x.run();
参考
ひげぽん OSとか作っちゃうかMona- - 実践 prototype.js [2]
404 Blog Not Found:怠翻 - JavaScriptでありがちな9つのシマッタ
- Newer: Google ReaderがGoogle リーダーに
- Older: Javascript+ハンガリアン?
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://blog.joyfullife.jp/archives/2007/09/11185000.php/trackback
- Listed below are links to weblogs that reference
- Javascriptのthisに戸惑った from 30からのBlog