JavaScript OOP publiczny i prywatny zakres zmiennych
Mam pytanie dotyczące publicznych i prywatnych zmiennych w obiekcie Javascript. Oto prosty kod, z którym bawiłem się, aby skupić się na zmiennym zakresie, jak również właściwościach prywatnych i publicznych.
var fred = new Object01("Fred");
var global = "Spoon!";
function Object01(oName) {
var myName = oName;
this.myName = "I'm not telling!";
var sub = new subObject("underWorld");
this.sub = new subObject("Sewer!");
Object01.prototype.revealName = function() {
return "OK, OK, my name is: " + myName + ", oh and we say " + global;
}
Object01.prototype.revealSecretName = function() {
console.log ("Private: ");
sub.revealName();
console.log("Public: ");
this.sub.revealName();
}
}
function subObject(oName) {
var myName = oName;
this.myName = "My Secret SubName!";
subObject.prototype.revealName = function() {
console.info("My Property Name is: " + this.myName);
console.info("OK, my real name is: " + myName + ", yeah and we also say: " + global);
}
}
Zabawna rzecz, jaką do tej pory obserwowałem, jest w moich obiektach, zwykła zmienna jest traktowana jako prywatna (oczywiście, ponieważ znajduje się w bloku funkcyjnym) i jestthis
wersja jest publiczna. Ale zauważyłem, że zmienna o tej samej nazwie zthis.xxx
wydaje się być uważana za inną zmienną. Tak więc w powyższym przykładzie mój obiektfred
zgłosi coś innegothis.myName
w porównaniu z moją funkcją wyciągania mojegovar myName
.
Ale to samo zachowanie nie jest takie samo dla podobiektu, który tworzę. W przypadkuvar sub
vsthis.sub
oba powyższe używają anew subObject
wywołanie, aby podobno utworzyć dwa podobiekty. Ale wydaje się, że obathis.sub
ivar sub
ZwróćSewer!
wersja.
Som Jestem trochę zdezorientowany, dlaczego używam Stringsthis.myName
ivar myName
Otrzymuję dwa różne wyniki, ale moja próba zrobienia tego samego z innym obiektem nie daje podobnego wyniku? Sądzę, że może się okazać, że używam ich niewłaściwie lub nie rozumiem różnic między athis
ivar
wersja.