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