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宣言について述べたいと思います。