2011-12-24 94 views
2

我讀過JavaScript沒有真正具有「靜態」變量(當我說「靜態」時,我的意思是程序編程風格,就像C,而不是C++)如何調用私人功能?

我設法得到這段代碼從計算器這個鏈接部分: I've Heard Global Variables Are Bad, What Alternative Solution Should I Use?

var FOO = (function() { 
     var my_var = 10; //shared variable available only inside your module 

     function bar() { // this function not available outside your module 
      alert(my_var); // this function can access my_var 
     } 

     return { 
      a_func: function() { 
       alert(my_var); // this function can access my_var 
      }, 
      b_func: function() { 
       alert(my_var); // this function can also access my_var 
      } 
     }; 

    })(); 

如何調用函數「欄中的」間接地,如果在所有有可能?

+6

如果有的話,JavaScript中的* all *功能是「靜態的」。它們不受特定對象的約束。 'this'的值僅僅來自它們如何被調用,並且創建的閉包是每個函數。爲「FOO.bar」命名一個函數就是這樣 - 給它一個「穩定的」(商定的)標識符。 – 2011-12-24 07:12:30

回答

4

由於barFOO的內部定義,因此它只能從FOO內部引用,它就像my_var那樣。

在這裏,我用bar上的呼叫替換了a_funcb_func中的alert調用。

var FOO = (function() { 
     var my_var = 10; //shared variable available only inside your module 

    function bar() { // this function not available outside your module 
     alert(my_var); // this function can access my_var 
    } 

    return { 
     a_func: function() { //this function can access my_var and bar 
      bar(); 
     }, 
     b_func: function() { 
      bar(); 
     } 
    }; 

})(); 
2

不知道我完全理解你的問題。如果您希望外部呼叫者訪問內部功能欄,您可以使用如下返回結構來完成此操作:

var FOO = (function() { 
     var my_var = 10; //shared variable available only inside your module 

     function bar() { // this function not available outside your module 
      alert(my_var); // this function can access my_var 
     } 

     return { 
      a_func: bar, 
      b_func: function() { 
       bar(); // this function can also access my_var 
      } 
     }; 

    })();