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){ ... }

スコープを渡さないで実行すると、コールバックのスコープはイベント自身なんだけど クラス内で$.ajaxを使いたい場合なんかは不都合ですんで。

時間があれば、さくっとプラグインにしておきたいけど プラグインにするほどのコード量じゃないし、 プラグインは別ファイル化するのが一般的だから、いちいち面倒くさいし。

ちなみに、これはActionScriptでいうところの mx.utils.Delegate.createと全く同じ機能ですね。

関連記事

  1. JavaScript、クロージャをおさらいしてみる
  2. jQueryでホットキーするメモ
Posted in ajax, javascript, jquery at 2月 21st, 2008. Trackback URI: trackback

3 Responses to “prototype.jsのFunction.bindをjQueryでも。”

  1. 5月 28th, 2008 at 10:14 PM #Hiroshi

    こちらのコードを使用させていただいてたんですが, $.grepなどで使用するとおかしくなるので1か所修正してみました. http://16c.jp/2008/0528214632.php

  2. 5月 28th, 2008 at 11:20 PM #haga

    Hiroshiさん

    修正ありがとうございます!

  3. 2月 9th, 2009 at 1:39 PM #javascriptでOOPとjQuery - STUDIO Bloom 大阪・北摂地域を中心としたWebサイト・システム制作

    [...] 参考ページ。 [...]

Leave a Reply