0

次のコード スニペットを検討してください。

function C1() {
    // private variable in the constructor
    a = 1;
}

C1.prototype.f1 = function() {
console.log( "a=" +  a );
}

C1.prototype.f2 = function() {
    a = 2;
    process.nextTick( this.f1 );
}

o = new C1();
o.f1();
o.f2();

観測された出力は次のとおりです。

a=1
a=2

コンストラクター関数の外ではプライベート変数にアクセスできないと思いましたか?

4

1 に答える 1

1

JavaScript では、「var」キーワードなしで宣言された変数はグローバル スコープを持ちます。ブラウザーでは、変数を window オブジェクトにアタッチすることでこれを実現します (Node でどのように機能するかはわかりません)。オブジェクトにアクセスできるプライベート変数が必要な場合は、オブジェクト コンストラクターとプロトタイプ宣言を閉じてみてください。

于 2013-08-12T19:18:54.473 に答える