2 月 21 2008
prototype.jsのFunction.bindをjQueryでも。
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と全く同じ機能ですね。
こちらのコードを使用させていただいてたんですが, $.grepなどで使用するとおかしくなるので1か所修正してみました. http://16c.jp/2008/0528214632.php
修正ありがとうございます!