Страницы

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

понедельник, 30 марта 2020 г.

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

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

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

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