2012-03-20 93 views
0

我想知道如何在Javascript類中創建一個私有屬性。我嘗試這樣做:訪問私有屬性Javascript OOP

function Class1(selector) 
{ 
    //calling the constructor 
    Constructor(); 

    //private attribute 
    var $container = null; 

    function Constructor() 
    { 
     $container = $(selector); 

     //Shows that container is an object 
     alert($container); 
    } 

    function Foo() 
    { 
     //Shows that container is null 
     alert($container); 
    } 

    result { 
     Foo : Foo 
    }; 
} 

我認爲,在「構造」它會創建一個新的變量$容器和對象分配給它。我想知道我是如何將值分配給對象的屬性$容器而不是函數構造函數中的局部變量。

+1

'$容器= $(選擇);'能做到這一點,但似乎你永遠不會調用'Constructor' *編輯: *錯過了第一行,是的,這些陳述只是錯誤的順序。也就是說,我不是那種以這種方式模擬可視性的大愛好者。海事組織使得代碼過於複雜和不靈活。而是恰當地記錄你的代碼。 – 2012-03-20 15:27:47

+1

剛剛發現它......這是因爲我在創建變量之前調用了構造函數方法。所以它在函數中創建一個,然後創建一個對象。 – maniak 2012-03-20 15:29:38

+0

@Felix Kling我認爲它使代碼更清晰。只需設置腳本在其自己的私人處理和其他公共的功能,以便用戶可以參考它。可能不是最好的解決方案,但它的工作原理,我認爲這是因爲所有的COMON功能重新組合後更容易編輯。 – maniak 2012-03-20 15:33:08

回答

1

這是因爲你先叫Constructor()後您分配null$container

如果您切換周圍,你會得到期望的結果:

http://jsfiddle.net/R8RG5/

+0

是的,謝謝我發現它......只是不能設置問題來解決我自己的問題,但自從您回答解決方案後,我發現我會將您的答案標記爲已接受。 – maniak 2012-03-20 15:35:33

0
function Class1(selector) { 

    var container = null; //private attribute 
    constructor(); //calling the constructor 

    function constructor() { 
     container = $(selector); 
     console.log($container); //Shows that container is an object 
    } 

    function foo() { 
     console.log(container); //Shows that container is null 
    } 

    result { Foo : foo }; 
} 

如紅-X已經告訴:你必須在容器變量初始化後執行構造函數。

在我的例子:是一個更好的做法是使用console.log調試..

+0

我不認爲使用小寫字母的名字真的更好。我總是用課堂上課,並被告知。如果你看看Java,即使是類String以大寫字母開頭。 – maniak 2012-03-20 16:03:20

+0

@maniak我寫了「函數名稱」不是類名和更正了類的名稱:) – mrzmyr 2012-03-20 16:04:27

+0

大聲笑OK!但仍然認爲它取決於你的風格。我用C++編寫了大量的電子遊戲編程書籍,其中很多以大寫字母編寫函數。我不認爲這是更好的做法,而只是兩種不同的風格。刪除了 – maniak 2012-03-20 16:40:18