JavaScript で private を扱う

なんか妙なタイトルだが、要は隠蔽されたメンバを利用するってこった。
JavaScript は public や private といったキーワード(?)がない*1ため、全てのメンバが自動的に公開されているものと考えていた。実は、どうやら private なプロパティとメソッドを作成できるらしい。
やり方はこうだ。

function ObjectWidthPrivateMembers()
{
	var privatePropaty = "private member";
	var PrivateMethod  = function() {return "private member";}
	this.publicPropaty = "public member";
	this.PublicMethod  = function() {return "return ["+privatePropaty+"]";}
}
obj = new ObjectWidthPrivateMembers();
alert(obj.privatePropaty);
alert(obj.PrivateMethod);	// 未定義のまま使用するとエラーになるので
alert(obj.publicPropaty);
alert(obj.PublicMethod());

おいおいそれ変数じゃねぇか。
しかしなるほど、たしかにこれは private なメンバと考えて差し支えない動作をする。つまり外からはアクセスできないのだ。また値は保存されるから、局所変数として破棄されもしない。
こういう使い方があったのかあ。
参考→Collection & Copy - JavaScriptにおけるプライベートメンバ

*1:ただし予約語ではある。