#javascript #ооп
Куда сохраняются приватные свойства созданного объекта? Например у нас есть такой код:
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, но после создания нового объекта
через конструктор, этих свойств нет в этом объекте. И в глобальной области видимости
этих свойств тоже нет, куда они тогда сохраняются?
Ответы
Ответ 1
Они хранятся в замыкании. Вот более просто пример этого механизма 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. В обычном случае после выполнения функции, об А бы уничтожилась и переменная пропала, НО мы возвращаем функцию, которая имеет доступ к созданной об А, поэтому об А сохраняется. В вашем случае механизм тот же: функция возвращает объект, у которого есть методы, использующие область видимости этой функции.
Комментариев нет:
Отправить комментарий