Куда сохраняются приватные свойства созданного объекта? Например у нас есть такой код:
function User() {
var firstName, surname;
this.setFirstName = function(firstNameUser) {
firstName = firstNameUser;
}
this.setSurname = function(surnameUser) {
surname = surnameUser;
}
this.getFullName = function() {
return surname + ' ' + firstName;
}
}
var user1 = new User();
user1.setFirstName('Phillip');
user1.setSurname('Moore');
console.log(user1)
console.log(window.surname)
Мы создаем приватные свойства firstName и surname, но после создания нового объекта через конструктор, этих свойств нет в этом объекте. И в глобальной области видимости этих свойств тоже нет, куда они тогда сохраняются?
Ответ
Они хранятся в замыкании. Вот более просто пример этого механизма
function setSecret(secret) {
const mySecret = `My secret: ${secret}`;
return function getSecret() {
return mySecret;
}
}
const secret1 = setSecret('secret 1');
const secret2 = setSecret('secret 2');
secret1(); // secret 1
secret2(); // secret 2
В данном случае, при каждом вызове функции setSecret, создается локальная область видимости ( об А ), где хранится одна переменная mySecret. В обычном случае после выполнения функции, об А бы уничтожилась и переменная пропала, НО мы возвращаем функцию, которая имеет доступ к созданной об А, поэтому об А сохраняется.
В вашем случае механизм тот же: функция возвращает объект, у которого есть методы, использующие область видимости этой функции.
Комментариев нет:
Отправить комментарий