2013-10-19 41 views
1

我已閱讀後JavaScript private methods,我們可以在JavaScript中「模擬」私人方法。如何在javascript中使用私有方法中的公共屬性?

function Restaurant(price) 
{ 
    var myPrivateVar; 

    this.price = price; 

    var private_stuff = function() // Only visible inside Restaurant() 
    { 
     myPrivateVar = "I can set this here!"; 
    } 

    this.toto = function() { 

     private_stuff(); 
     // do sthg 
    } 
} 

當我打電話的價格成員private_stuff方法,這是行不通的:

var private_stuff = function() // Only visible inside Restaurant() 
     { 
      myPrivateVar = "I can set this here!"; 
      alert(this.price); // return undefined ! 
     } 

因此,如何在JavaScript中的私有方法使用公共屬性?

+2

你寫的東西沒有意義;你至少應該提供完整的圖片:_where_和_how_,你叫'private_stuff'? – ZER0

+0

我想打電話給private_stuff在像「toto」這樣的公共方法 – scanpat

+0

看看我的答案在這裏:http://stackoverflow.com/questions/19419897/making-javascript-private-methods-accessible-to-its-public - 方法/ 19420598#19420598 – ZER0

回答

0

問題是:在private_stuff函數內部,this引用自身,而不是由Restaurant構造函數構造的對象。有幾種方法將該方法綁定到對象上,一種簡單的方法是:

this.toto = function() { 

    private_stuff.call(this); 
    // do sthg 

} 

在對象的上下文中調用該函數。

-1

我找到了解決方案:刪除「this」。

+0

它實際上不是「解決方案」:首先,您將無法通過公共方法訪問「private_stuff」。如果以某種方式處理訪問'private_stuff',那麼在沒有'this'的情況下,您的函數只會在創建實例時考慮'price'。任何進一步的變化都不會被考慮在內。 – ZER0

相關問題