4

javascriptでプライベートメンバーを使用または宣言する方法を教えてください。例をいただければ幸いです。これは初めてです

4

6 に答える 6

8

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 言語仕様のエラーの回避策であり、内部関数に対してこれが正しく設定されません。

プライベート メソッドをパブリック メソッドから呼び出すことはできません。プライベート メソッドを便利にするには、特権メソッドを導入する必要があります。

于 2013-01-25T06:53:38.790 に答える
4

これを行う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

この動作中のフィドルを見て、少し遊んでください;)

于 2013-01-25T06:54:24.897 に答える
1

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 
于 2013-01-25T06:59:35.933 に答える
0

プライベート メンバーは、コンストラクターによって作成されます。コンストラクターの通常の変数とパラメーターは、プライベート メンバーになります。

function Container(param) {
    this.member = param;
    var secret = 3;
    var that = this;
}

このコンストラクターは、param、secret、および that の 3 つのプライベート インスタンス変数を作成します。これらはオブジェクトにアタッチされていますが、外部からアクセスすることはできません。また、オブジェクト自体のパブリック メソッドからアクセスすることもできません。それらはプライベート メソッドにアクセスできます。プライベート メソッドは、コンストラクターの内部関数です。

詳細については、このリンクを参照してください。

于 2013-01-25T06:53:29.273 に答える