javascriptでプライベートメンバーを使用または宣言する方法を教えてください。例をいただければ幸いです。これは初めてです
6 に答える
Douglas Crockford はPrivate Membersについて次のように書いています。
プライベート メンバーは、コンストラクターによって作成されます。コンストラクターの通常の変数とパラメーターは、プライベート メンバーになります。
function Container(param) {
this.member = param;
var secret = 3;
var that = this;
}
このコンストラクターは、param、secret、および that の 3 つのプライベート インスタンス変数を作成します。これらはオブジェクトにアタッチされていますが、外部からアクセスすることはできません。また、オブジェクト自体のパブリック メソッドからアクセスすることもできません。それらはプライベート メソッドにアクセスできます。プライベート メソッドは、コンストラクターの内部関数です。
function Container(param) {
function dec() {
if (secret > 0) {
secret -= 1;
return true;
} else {
return false;
}
}
this.member = param;
var secret = 3;
var that = this;
}
プライベート メソッド dec は、シークレット インスタンス変数を調べます。ゼロより大きい場合は、secret をデクリメントして true を返します。それ以外の場合は false を返します。このオブジェクトを 3 回の使用に制限するために使用できます。
慣例により、その変数をプライベートにします。これは、オブジェクトをプライベート メソッドで使用できるようにするために使用されます。これは、ECMAScript 言語仕様のエラーの回避策であり、内部関数に対してこれが正しく設定されません。
プライベート メソッドをパブリック メソッドから呼び出すことはできません。プライベート メソッドを便利にするには、特権メソッドを導入する必要があります。
これを行う1つの方法は次のとおりです。
function TheClass() {
var _this = this;
var privateMember = 'foo';
this.publicMember = 'bar';
var privateMethod = function(){
// things happen here
};
this.publicMethod = function(){
//other things here
_this.publicMember = 'sparky';
return privateMember;
};
}
var myObj = new TheClass();
alert(myObj.privateMember); //won't work
alert(myObj.publicMember); //should work
alert(myObj.publicMethod()); //should work too
この動作中のフィドルを見て、少し遊んでください;)
JavaScript には、言うまでもなくプライベート変数はありません。JS では、変数は最も近い関数の先頭にスコープされます。したがって、関数 (またはクロージャー) を作成することは、プライベート変数をそのスコープ内でのみアクセスできるようにする方法です。覚えておくべき重要なことは、常に を使用var
して変数を宣言することです。そうしないと、関数内であっても、変数がグローバルになり、それは悪いことです。
プロトタイプの継承を使用している場合は、コンストラクターを作成するのと同じくらい簡単で、で宣言された変数はvar
プライベートになり、で宣言されてthis
パブリックになります。
function Bar() {
var foo = ''; // private
this.baz = function() {}; // public
}
var bar = new Bar(); // create new instance of Bar
alert(bar.foo); // error
alert(bar.baz); // function
また、上記のコンストラクターは非常に単純です。通常、関数メソッドをprototype
オブジェクトの実体に配置しますBar.prototype.baz = function(){}
。
たとえば、シングルトンを使用している場合は、モジュール パターンを使用できます。
var bar = (function(){ // bar is public
var foo = ''; // foo is private
function baz() {}; // baz is private
return {
baz: baz // expose 'baz' as a public member of 'bar'
}
}());
alert(bar.foo); // error
alert(bar.baz); // function
プライベート メンバーは、コンストラクターによって作成されます。コンストラクターの通常の変数とパラメーターは、プライベート メンバーになります。
function Container(param) {
this.member = param;
var secret = 3;
var that = this;
}
このコンストラクターは、param、secret、および that の 3 つのプライベート インスタンス変数を作成します。これらはオブジェクトにアタッチされていますが、外部からアクセスすることはできません。また、オブジェクト自体のパブリック メソッドからアクセスすることもできません。それらはプライベート メソッドにアクセスできます。プライベート メソッドは、コンストラクターの内部関数です。
詳細については、このリンクを参照してください。