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;をするコードを見たことがある。これはどういう意味があるのだろう…