FC2ブログ
JavaScriptのすごくつまづきやすいところ
setTimeoutにthisを渡せない

ダメな例:
var c = {
         name : 'bingo',
         func : function(){ alert(this.name) }
        };

setTimeout(c.func, 100);


いける例:
var c = {
         name : 'bingo',
         func : function(){ alert(this.name) }
        };

setTimeout(function(){c.func()}, 100);

ダメな理由:
function(){ alert(this.name) }だけが、setTimeoutに切り離されて渡されるため。
setTimeout(function(){ alert(this.name) }, 100);
と書いたのと同じことになってしまう。


setTimeoutに引数がわたせない

ダメな例:
var c = {
         name : 'bingo',
         func : function(age){ alert(this.name + ':' + age) }
        };

setTimeout(c.func(14), 100);


いける例:
var c = {
         name : 'bingo',
         func : function(age){ alert(this.name + ':' + age) }
        };

setTimeout(function(){c.func(14)}, 100);

ダメな理由:
setTimeoutには無名関数というか関数オブジェクトを渡さないといけないため

参考:
http://d.hatena.ne.jp/bingo_nakanishi_perl/20090207/1233969698
http://d.hatena.ne.jp/cloned/20070301
http://labs.cybozu.co.jp/blog/kazuho/archives/2006/12/oo-settimeout.php
まるごとJavaScript&Ajax!
スポンサーサイト



koduki
別解
もうちょっと安全な別解を書いてみた。トラックバックが送れない仕様の用なので。
http://pascal.orz.cn/muse/pascal/90227004229.html
2009/02/27 (金) 01:16:41|URL |#-
コメントを投稿する
Name:
URL:
Comment:

秘密:管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事にトラックバックする(FC2ブログユーザー)
ブログ検索

プロフィール

ビンゴ中西
Perlが好きである。
プログラミング言語のほとんどは独学。独学の過程で多くのプログラム仲間にも色々教わりました。

FC2カウンター

カレンダー

04 | 2021/05 | 06
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -

ブロとも申請フォーム

この人とブロともになる

| ホーム |