this
を使用してプライベート メソッドを呼び出すときに、 の値を指定するだけですFunction.prototype.call
。
myPrivateMethod.call(this);
例えば
function myClass(){
this.myPublicMethod = function(a,b){
var i = a*b;
return i;
}
function myPrivateMethod(){
var n = this.myPublicMethod(2,3);
}
//calling private method in the *scope* of *this*.
myPrivateMethod.call(this);
}
真のプライベート メンバー (関数ではない) を使用すると、プロトタイプを利用できないという犠牲が伴うことに注意してください。そのため、私は真のプライバシーを強制するよりも、プライベート メンバーを識別するために命名規則やドキュメントに依存することを好みます。これは、非シングルトン オブジェクトにのみ当てはまります。
次の例は、上記の内容を示しています。
//Constructors starts by an upper-case letter by convention
var MyClass = (function () {
function MyClass(x) {
this._x = x; //private by convention
}
/*We can enforce true privacy for methods since they can be shared
among all instances. However note that you could also use the same _convention
and put it on the prototype. Remember that private members can only be
tested through a public method and that it cannot be overriden.*/
function myPrivateMethod() {
this.myPublicMethod1();
}
MyClass.prototype = {
constructor: MyClass,
myPublicMethod1: function () {
//do something with this._x
},
myPublicMethod2: function () {
/*Call the private method by specifying the *this* value.
If we do not, *this* will be the *global object* when it will execute.*/
myPrivateMethod.call(this);
}
};
return MyClass;
})();