jQueryでtapを定義してみた

こんにちは. jQueryといえば...メソッドチェーンですよね! いかに繋げて処理を書ききるかという妙な欲求が湧いてくる代物ですが, チェーンの途中でエラーが発生すると後ろの処理は実行されません(いわゆる「列車の脱線」).

エラーが発生するとデバッグするのも大変です. というのも, どこが原因なのかチェーンが長いと見つけづらいし, チェーンの間の値の変化を調べる方法もありません.

Rubyでは...

メソッドチェーンという概念はRubyにもあります. Rubyにはtap()という便利なメソッドがあって(1.9から標準),チェーンの間に挟んで,そのときのオブジェクトを出力することができるのです(self, JavaScriptでいうところのthis).

jQueryでも使いたい!

ということで, そんなものがjQueryでもあったら便利ですよね. ということで書いてみました.

$.fn.tap = function (func) {
  $.isFunction(func) ? func.call(this, this) : console.debug(this);

  return this;
};

jQueryオブジェクトにメソッドを追加するには$.fnのプロパティとして関数を追加すればよいのでした. なお, tapの引数に関数を渡すと, thisを引数としてコールバックとして呼び出すようにしています. 渡さない場合はconsole.debugで単純に出力します.