今回はjavascriptのクラスについてです。
上の例は、一番簡単なクラスを宣言してみました。
「function」文で宣言だけをしたものですが、「new」宣言して「obj」に代入してやればクラス「hoge」が生成されて返されます。
「function」で宣言されたものをそのまま実行すれば、いわゆる関数ですが「new」で作成すればクラスになるということです。
「alert」の結果は”obj:[object Object]”が表示されます。
上の例は、一番簡単なクラスにプロパティを追加して宣言しました。
別の変数に「new」宣言して代入してやれば別々のインスタンス「hoge」クラスが生成されます。
「alert」の結果は”objX.property1:A”、”objY.property1:A”が表示されます。
同じプロトタイプの値を持つインスタンスが生成されたことが分かります。
異なるインスタンスかどうかは、”objY.property1”への代入で最後の「alert」の結果がかわることでわかります。
上の例は、プロパティの無い場合に、後付でプロパティを強制的に代入すればその時点でプロパティが生成されるようです。
「dumpObject」関数はオブジェクトのプロパティ内容を表示するように作成した、簡易の変数ダンプ関数です。
そこでプロパティ宣言をするところで「prototype」をつけてみます。
「hoge.property1 = "A";」と宣言したものと変わらない感じですが、内部的には最初の2個の「new」宣言を行った時点では 「objX」「objY」のproperty1は同じものを参照しています。
その後「objX.property1 = "B";」の時点で、「objX.property1」が別のところに生成され、別のプロパティとして存在することになります。
それでは、prototypeを関数に拡張してみます。
この例から、同じクラス宣言で同じ関数ではあるが、特別に機能を変えたいときなどに便利な感じです。