2012-02-04 3 views
0

私は方法のいくつかは公開され、他のいくつかのはプライベートで、JavaScriptでクロージャなどのオブジェクトを実装している:JavaScript:プライベート変数にアクセスすることは可能ですか(つまり、クロージャ内に隠されていますか?)

var MyObject = (function(){ 

    function _hiddenMethod() { 
     /* Do something fancy here, such as reading data 
     from an external source and storing it in 
     _hiddenVariable2 */ 
    } 

    var _hiddenVariable1 = 3; 
    var _hiddenVariable2 = undefined; 

    return { 
     publicMethod: function() { 
      _hiddenMethod(); 
      return _hiddenVariable1; 
     }; 
    }; 

})(); 

は(熟練した)ユーザーは、おそらく_hiddenVariable2の内容を読むことができるする方法はあります?私はJavaScriptコードを読んでその存在を知っていると仮定します。

答えて

1

私の知っている方法はありませんで、他のモジュールに利用できるようになります_hiddenVariable2 = undefined;の代わりvar _hiddenVariable2 = undefined; としてそれを宣言しますが、それはjavascriptのエンジンに依存する場合があります。

はまた、誰もがJavaScriptをデバッグし_hiddenVariable2が閉鎖に設定されているときは常に注意してくださいすることができますことを、心に留めておく(Chromeの開発ツールを試してみてください、_hiddenMethod内部_hiddenVariable2 = 5のようなものを書いて、_hiddenMethodにブレークポイントを挿入し、そして必要になります_hiddenVariable2がいつ設定されているかを見ることができます)。

たとえば、V8でコードをデバッグする場合、熟練したユーザーがその現在の値を知ることができます。

-1

は、それはあなたのコード

+1

うわー、あなたは* global *という単語を使用していませんが、それは 'window._hiddenVariable2'です**グローバル変数**! –

+1

これは全く問題ではありません – rossipedia

+0

はい!あなたが正しいです。 varを使用しない場合は、グローバル変数になります –

関連する問題