かつのりの日記2

わんくまでは珍しいJavaを中心とした日記です

目次

Blog 利用状況

書庫

日記カテゴリ

いろいろリンク

JavaScriptでオブジェクト指向っぽいライブラリを作ってみた。

表題のとおり、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はいかに関数と配列とスコープを制するかがキモとなる言語です。なのでこの辺のサポートを強化してから公開します。

投稿日時 : 2007年12月26日 1:49

Feedback

# re: JavaScriptでオブジェクト指向っぽいライブラリを作ってみた。 2007/12/27 8:54 774

alert(person.getPerson()) //Taro Yamada

alert(person.getName()) //Yamada Taro

# re: JavaScriptでオブジェクト指向っぽいライブラリを作ってみた。 2007/12/27 12:40 かつのり

アッー!すいません、指摘ありがとうございます。

タイトル
名前
Url
コメント