JavaScriptでオブジェクト指向をするには

最近JavaScriptぜんぜん触ってない

JavaScriptオブジェクト指向をしようと思うと、文法がちょっと変わってるということに気づく。復習がてらメモしておく

簡単に2次元ベクトルのクラスを書いてみる

var Vector = function(x,y) //クラス定義&コンストラクタ
{
	//メンバの設定
	this.x = x;
	this.y = y;
}

//メソッド
Vector.prototype.toString = function()
{
	return "("+this.x+","+this.y+")";
}
Vector.prototype.Absolute = function()
{
	return Math.sqrt(this.x*this.x+this.y*this.y);
}

//静的変数??
Vector.e_x = new Vector(1,0);
Vector.e_y = new Vector(0,1);

var z = new Vector(1,2);
alert(z.toString());

コンストラクタ内ではオブジェクト固有のデータを書き込み、prototypeではそのクラス共通のものを書き込むようである。
だから、メンバ変数ならクストラクタ内で定義。メソッドはクラスで共有なのでprototype内。
静的な変数についてはよくわからない。Vector.fooというようにデータを保存することはできるが、メソッド内で読み出すときに単にfooとしても読み出せなかった。Vector.prototype.fooとして書き込むとthis.fooとして読み出せるが、静的変数なのにthis.を使うというのが気に食わない…。まぁthisがzではなくてVectorを指していると考えれば確かに辻褄は合うけれど

ちなみにクラス定義で、わざわざ無名関数を代入する形で書いたが

function Vector(x,y) //クラス定義&コンストラクタ
{
	//メンバの設定
	this.x = x;
	this.y = y;
}

としても良い。あと、コンストラクタでreturn this;をするコードを見たことがある。これはどういう意味があるのだろう…