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
версия.