JavaScriptで本格プログラミング(2)
JavaScriptでよく言う「ユーザー定義オブジェクト」を作るための関数をクラスのコンストラクタだとするならば、staticフィールドはどのように作成するかというと…
とりあえず、コンストラクタのメンバに値を持たせる
次のように、prefixとsuffix、そしてprototypeにtoStringをオーバーライドしました。
(ここではprototypeにtoStringをオーバーライドするとどうなるかは省略します。)
function Bean() {
var data;
this.getValue = function() {
return data;
};
this.setValue = function(value) {
data = value;
};
}
Bean.prefix = "value=";
Bean.suffix = ";";
Bean.prototype.toString = function() {
return Bean.prefix + this.getValue() + Bean.suffix;
};
これを実行してみると以下のようになります。
var obj1 = new Bean();
obj1.setValue(1);
alert(obj1); // value=1;
var obj2 = new Bean();
obj2.setValue(2);
alert(obj1); // value=1;
alert(obj2); // value=2;
Bean.prefix = "data=";
alert(obj1); // data=1;
alert(obj2); // data=2;
さて、これでstaticなフィールド(もちろん関数の参照を入れておけば、staticメソッド)ができました。
ただし、これらはpublicフィールドですので、外から値を直接操作できないprivateフィールドも欲しくなりました。
なので、次はprivateなstaticフィールドをどのように作るか…を解説する前提となる、var宣言について述べたいと思います。