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.

questionAnswers(5)

yourAnswerToTheQuestion