2 月 21 2008

prototype.jsのFunction.bindをjQueryでも。

Published by haga at 11:02 under ajax, javascript, 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と全く同じ機能ですね。

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

  1. Hiroshion 28 5 月 2008 at 22:14

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

  2. hagaon 28 5 月 2008 at 23:20

    Hiroshiさん

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

Trackback URI | Comments RSS

Leave a Reply