(※この記事はJavaScript Advent Calendar 2011 (フレームワークコース) : ATNDの15日目の記事です)
jQueryとクラスベースはうまく混ぜるのがむつかしいけど、こんな感じにすれば割とクラスっぽく書けると思う。
(function () {
var $ = jQuery.sub();
jQuery.klass = jQuery.klass || {};
jQuery.klass.myKlass = $;
var klassVar = ‘hoge’;
$.fn.myMethod = function () { alert(klassVar); };
})();
(function () {
var $ = jQuery.klass.myKlass.sub();
$(window).myMethod(); // alert(‘hoge’);
})();
これで少なくとも継承とカプセル化はできる。
後は各klass内で$()で取得した結果がインスタンス的なものになるので各クラス内で処理すればいい。
ただ、一般的なOOPのようにクラスと呼び出しを分けるより、クラス定義の部分に処理を全て書き出して外部との通信はカスタムイベントかプラグイン的な呼び出し方がいいと思う。
クラスというより処理の切り出し方という感じかも。
これとURL dispatcherを混ぜるとそれなりに規模が大きくても割といける。
URL dispatcherは処理の階層化が難しいという問題があって、
/hoge/
/huga/
というディレクトリに対する処理を切り出すのは簡単だけど、
/hoge/foo
/hoge/bar
というディレクトリに対する処理を/hoge/共通処理と/hoge/foo、/hoge/bar個別処理で切り出すのは多少考える必要がある。
(/hoge/の共通処理をグローバルに定義すれば簡単だけど)
クラスっぽい書き方であれば処理の階層化ができるのでこのへんうまく書ける。
もしもjQueryでクラスっぽく書くなら