我有這樣的代碼在這裏:使用Javascript的私人會員。它們可以是非靜態的嗎?
var Person = (function() {
var name;
var PersonConstructor = function(n) {
name = n;
};
PersonConstructor.prototype.getName = function() {
return name;
};
return PersonConstructor;
})();
var people = [];
var person1 = new Person("Foo");
var person2 = new Person("Bar");
alert(person1.getName()); // I want it to be Foo
people.push(person1);
people.push(person2);
我從here.模擬類的想法。但是當然,我忽略了私有變量var name;
也是一個靜態變量的事實。既然這是絆倒我目前的努力,我想知道在這個例子中是否有辦法保持私人行爲,但避免靜態的?
您不能在構造函數中引用原型函數引用局部變量。我會遠離在JavaScript中模擬可見性的方式。這不僅僅是語言的一部分,還會產生更多的問題。使用適當的文檔,將屬性標記爲'@ private',並根據代碼的用例,使用像Google的Closure編譯器這樣的東西,只按照他們的實際名稱公開屬性。 – 2012-04-08 12:06:10