Здравствуйте. Беспокоит вопрос, на который не могу найти ответ :
Почему при создании собственного конструктора ( в данном случае User ) второй созданный объект этого конструктора не меняет локальную переменную
var firstname
? Используя замыкание метод setFirstName второго объекта изменяет локальную переменную конструктора firstname. Затем, когда мы обращаемся к первому объекту и выводим его firstname, то оно остается прежним.
Не могу понять как это работает.
JSFiddle:
https://jsfiddle.net/zaue36h9/90/
Код :
function User() {
var firstname, surname;
this.setFirstName = function(name) {
if (name.replace) {
firstname = name;
}
else {
throw new Error('Введите имя');
}
}
this.setSurname = function(name) {
if (name.search) {
surname = name;
}
else {
throw new Error('Введите фамилию');
}
}
this.getFullName = function() {
return firstname + ' ' + surname;
}
}
var user = new User();
user.setFirstName("Петя");
user.setSurname("Иванов");
alert( user.getFullName() ); // Петя Иванов
var user2 = new User();
user2.setFirstName('Фёдор');
user2.setSurname("Марков");
alert( user2.getFullName() );
alert( user.getFullName() ); // Петя Иванов
Опять же, если провести аналогию :
function hi() {
var hz = 15;
(function() {
hz = 20;
alert(hz);
})();
alert(hz);
}
hi();
то внешняя функция меняет переменную внутренней. Почему же так не работает первый случай?