prototype.jsで関数のスコープを任意のオブジェクトに委譲する Function.bindメソッドはイベントのコールバック関数なんかで使うのにすこぶる便利なんだけど jQueryには意外とそれっぽい機能がないように思う。 ので応急処置として以下のコードを書いておく。
jQuery.scope = function(target,func){ return function() { func.apply(target,arguments);}};
こう使います。
$.ajax({
url:'hoge.xml',
complete: $.scope(this,handleComplete)
});
function handleComplete(data,status){ ... }
url:'hoge.xml',
complete: $.scope(this,handleComplete)
});
function handleComplete(data,status){ ... }
スコープを渡さないで実行すると、コールバックのスコープはイベント自身なんだけど クラス内で$.ajaxを使いたい場合なんかは不都合ですんで。
時間があれば、さくっとプラグインにしておきたいけど プラグインにするほどのコード量じゃないし、 プラグインは別ファイル化するのが一般的だから、いちいち面倒くさいし。
ちなみに、これはActionScriptでいうところの mx.utils.Delegate.createと全く同じ機能ですね。
関連記事
5月 28th, 2008 at 10:14 PM #Hiroshi
こちらのコードを使用させていただいてたんですが, $.grepなどで使用するとおかしくなるので1か所修正してみました. http://16c.jp/2008/0528214632.php
5月 28th, 2008 at 11:20 PM #haga
修正ありがとうございます!
2月 9th, 2009 at 1:39 PM #javascriptでOOPとjQuery - STUDIO Bloom 大阪・北摂地域を中心としたWebサイト・システム制作
[...] 参考ページ。 [...]