我在JavaScript的顯示原型模式中遇到私有變量的問題。我無法弄清楚如何在共享(單例)原型中的幾個不同的函數中使用私有變量,而無需公開它們。這裏是我在JSFiddle中的意思的例子。顯示原型模式私有變量
問題在於使用var v
與this.v
。第一個是混淆所有實例的狀態,第二個是公開可見的。有沒有辦法讓v私人,並保持每個個體實例的狀態?
我在JavaScript的顯示原型模式中遇到私有變量的問題。我無法弄清楚如何在共享(單例)原型中的幾個不同的函數中使用私有變量,而無需公開它們。這裏是我在JSFiddle中的意思的例子。顯示原型模式私有變量
問題在於使用var v
與this.v
。第一個是混淆所有實例的狀態,第二個是公開可見的。有沒有辦法讓v私人,並保持每個個體實例的狀態?
有沒有辦法做到這一點與揭示原型模式。
你只能做的是這樣:
function MyClass() {
var v = 1;
this.getV = function() {
return v;
};
}
這就是爲什麼有對於這種方法的一些鐵桿愛好者。
個人選項:在其前面貼上下劃線,並將其放在對象上:this._v
。不要與JavaScript鬥爭;用它。
似乎只有私人成員纔有可能。只要需要setter,它就必須公開可見,並且沒有'this.setV = function(value){...'的意義。我想我會和'this._v'住在一起;) –
@ lucky3,那裏*是一個用於setter的。假設你想確保'v'是一個正數。 'setV'會做驗證。 –
是的,您可以在JavaScript中擁有實例特定的「私有」變量,但是任何使用這些變量的函數都必須在構造函數的主體中定義(請參閱Paul的答案)。這意味着需要更多的cpu和內存來創建實例。如果你有足夠的理由編寫消耗更多資源的代碼,那就去做吧。就我個人而言,我從來沒有找到足夠的理由,並會同意保羅在變量前面加下劃線,以表明它是私有的。更多信息的原型,繼承... http://stackoverflow.com/a/16063711/1641941 – HMR