2012-07-24 79 views
0

我正在通過「JavaScript Web應用程序」工作,想追加我創建的類庫。這裏是小提琴http://jsfiddle.net/andrewjmead/gXMp8/。現在它可以工作,但我記得聽說最好避免在代碼中使用__proto__。我目前正在使用它來創建操作私有變量的函數。我將如何使用私有變量創建實例方法?

現在貓類繼承自Animal類。我想在cat的構造函數中添加一個私有變量「name」,然後創建一個getName和setName來爲每個實例操作此值。

Var tom = Cat("tom"); 
tom.setName("fud"); 
tom.getName(); //fud 

我應該使用this.getName()而不是這個。 proto .getName(),還是我錯了?

回答

1

我認爲在像javscript或Python這樣的動態語言中,實際上並不需要private變量。當我們說private時,我們實際上會說「如果你不知道你在做什麼,請不要碰這些東西」。所以對private的事情不要太嚴格。而且,如果你真的想保留一些變量private,我更喜歡使用closure。這是一個很好的方法,使一些變量真的private。例如:

function Cat(name){ 
    var _name = name; 

    this.getName = function(){ 
     return _name; 
    } 

    this.setName = function(name){ 
     _name = name; 
    } 
} 

在這種方法中,是沒有辦法訪問_name可變出Cat。但是有一些缺點可以輕鬆搞清楚,您必須在constructor函數中編寫gettersetter方法。花式Cat.prototype.someFunc宣言消失了。

在我真正的工作中,我曾經用javascript工作了2年,我贊成使用領先的_來告訴別人,這是一個私有變量,因爲我是一個Python迷。 ;-)

+0

是的,在這個例子中我並不需要隱私。我只是想知道如何完成它。感謝您提供豐富的答案。 – AndrewJM 2012-07-24 13:13:19

+0

是的,真正的私人變量只能通過關閉來完成。 – xiaowl 2012-07-24 13:39:37

相關問題