プライベートインスタンス変数あるいは、プライベートインスタンス関数(プライベートインスタンスメソッド)は、原則としてクラス変数やクラス関数、インスタンスからも参照することはできません。 たとえば、コンストラクタ内で定義されたローカル変数(プライベートインスタンス変数)が該当します。
var classCounter = function(param)
{
// Instance-Variable
this.param = param;
this.number = 0;
// Private-Instance-Variable (Local Variable)
var version = '1.0';
}
classCounter.prototype.counter()
{
this.number++; return this.number;
}
上のコードの場合、インスタンス変数 param, number はインスタンスから参照可能ですが、変数 version は classCounter() 関数のローカル変数なので、クラスやインスタンス、あるいはインスタンス関数 counter() からも参照することはできません。 Javascript にはクロージャの概念があります。クロージャは、エンクロージャの持つローカル変数(レキシカル変数)に参照できる特徴があるので、この方法を使います。
var classCounter = function(param)
{
this.self = this;
this.param = param;
var version = '1.0';
// Private-Instance-Method
var getVersion = function()
{
return version;
}
// Instance-Method
this.getVersion = getVersion;
}
classCounter.prototype.counter()
{
this.number++; return this.number;
}
エンクロージャ classCounter() 関数に、変数 version を返すためのインスタンス関数 getVersion() 関数を追加し、それをクロージャとします。いわば、ローカル変数との橋渡しをするバイパス関数となります。