2012-02-04 36 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

沒有辦法,我知道的,但它可能依賴於JavaScript引擎。

也請記住,任何人都可以調試JavaScript,並注意每當_hiddenVariable2在封閉設置(寫類似_hiddenVariable2 = 5 _hiddenMethod內,嘗試開發工具鍍鉻,並插入一個斷點到_hiddenMethod,會讓你能夠看到什麼時候設置_hiddenVariable2)。

因此,熟練的用戶可以知道它的當前值,例如,如果他在V8中調試代碼。

-1

聲明爲_hiddenVariable2 = undefined;,而不是var _hiddenVariable2 = undefined; 這將是提供給任何其他模塊中的代碼

+1

哇,你還沒有使用* global *這個詞,但這就是'window._hiddenVariable2' **全局變量**! – 2012-02-04 08:08:24

+1

這並沒有解決這個問題 – rossipedia 2012-02-04 08:09:01

+0

是的!你是對的。如果你不使用var,它會變成全局變量 – 2012-02-04 08:09:54

相關問題