プライベート変数の作り方

JavaScriptでプライベート変数は作れない」のような解説を何回も見かけたことがありますが、作れます。

いわゆる「ユーザー定義オブジェクト」を作成するわけですが、その中でvar宣言をします。
var宣言は非常に重要で、するかしないかで大きな違いが出ます。

見たほうが早いので、以下がサンプルです。

function SampleClass(name) {

  this.getName = function() {
    return name;
  };

  var birth = new Date();

  this.getBirth = function() {
    return birth;
  };

  return this;
}

//----------------------

var x = new SampleClass("This is x.");
alert("ここで少々中断し、誕生時間をずらす。");
var y = new SampleClass("This is y.");

alert(x.getName() + "\n" + x.getBirth().toLocaleString());
alert(y.getName() + "\n" + y.getBirth().toLocaleString());

お互いにname変数やbirth変数が干渉していないことがわかります。
毎回SampleClass関数がnewされるたびに、変数name,birthと関数getName,getBirthが作成されます。
例えば、getBirthの中でreturnしている変数birthは、getBirthが作成された時点でのbirth変数になります。
このようにして、プライベート変数とそのアクセッサを作る*1ことができます。

※補足1:当然this.xxxとした場合はパブリックとなります。ここの説明はそれなりに色々なところに出ているので説明は他に譲ります。
※補足2:getName,getBirthは、変数name,birthを参照していますから、SampleClassコンストラクタの中でthisに対して作成する必要があります。

*1:JAVAでいうBeanを作ることができます。