表題のとおり、JavaScriptでオブジェクト指向っぽく記述できるライブラリを作ってみました。サポートしている機能としては、
- コンストラクタ
- フィールド
- メソッド
- staticイニシャライザ
- staticフィールド
- staticメソッド
- 継承
- インスタンスからクラス取得
- クラスからインスタンス生成
- メソッド内で親クラスのメソッド参照
- 名前空間
辺りをサポートしています。以下に記述例を何点か掲載します。
まずは普通のクラス定義。
//普通のクラス定義
$class.create("Foo").define({
//コンストラクタ
Foo : function(n, m){
this.n = n;
this.m = m;
},
//メソッド
plus : function(){
return this.n + this.m;
}
});
//Fooを継承
$class.create("Bar").extend(Foo).define({
//コンストラクタ
Bar : function(n, m){
//親クラスのコンストラクタへ委譲
this.getSuper().Foo(n, m);
},
minus : function(){
return this.n - this.m;
}
});
次に、利用サンプル。
var bar = new Bar(10,5);
alert(bar.plus()); //15
alert(bar.minus()); //5
次に、static編。
//普通にクラス定義
$class.create("Person").define({
//コンストラクタ
Person : function(familyName, firstName){
this.familyName = familyName;
this.firstName = firstName;
},
//$で始まるメンバはstatic扱い
$getPerson : function(name){
var ary = name.split(" ");
return new Person(ary[0], ary[1]);
},
//メソッド
getName : function(){
return this.firstName + " " + this.familyName;
}
});
次に利用コード。
var person = Person.getPerson("Taro Yamada");
alert(person.getPerson()) //Taro Yamada
次に名前空間サポート編。
//名前空間foo.barを定義
$class.namespace("foo.bar").bind(function($class){
//foo.barにHogeクラスを定義
$class.create("Hoge").define({
Hoge : function(piyo){
this.piyo = piyo;
},
getPiyo : function(){
return this.piyo;
}
});
});
次に利用コード。
var hoge = new foo.bar.Hoge(123);
alert(hoge.getPiyo()); //123
と、こんな感じです。自分自身がprototype.jsがあまり好きではないけど、クラス定義っぽいことがしたい。ということで作ってみました。とはいえ過去に作ったものの焼き直しなんですが、比較的いい感じに仕上がったかなという感じです。
JavaScriptはいかに関数と配列とスコープを制するかがキモとなる言語です。なのでこの辺のサポートを強化してから公開します。