Javascript ООП области открытых и закрытых переменных

У меня возник вопрос относительно открытых и закрытых переменных в объекте Javascript. Вот'простой код, который яЯ играл с тем, чтобы разобраться в переменной области, а также в частных и публичных свойствах.

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);
    }
}

Самое смешное, что яМы уже видели, что находится внутри моих объектов, обычный var рассматривается как закрытый (очевидно, поскольку они находятся в функциональном блоке), иthis версия является публичной. Но я'мы заметили, что переменная с тем же именемthis.xxx кажется, считается другой переменной. Итак, в приведенном выше примере, мой объектfred сообщит что-то другое дляthis.myName по сравнению с моей функцией тянуть мою.var myName

Но это то же самое поведение неТо же самое для подобъекта, который я создаю. В случаеvar sub противthis.sub оба выше используютnew subObject вызов якобы сделать два подобъекта. Но похоже обаthis.sub а такжеvar sub вернутьSewer! версия.

Сом яя немного озадачен, почему, если я использую строки дляthis.myName а такжеvar myName Я получаю два разных результата, но моя попытка сделать то же самое с другим объектом нене дают аналогичный результат? Я думаю, это может бытьЯ неправильно их использую или не понимаю различий междуthis а такжеvar версия.

Ответы на вопрос(5)

Ваш ответ на вопрос