Страницы

Поиск по вопросам

пятница, 7 июня 2019 г.

Как правильно понимать приватные свойства в ООП?

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

Комментариев нет:

Отправить комментарий