Показать сообщение отдельно
  #1 (permalink)  
Старый 14.06.2020, 12:08
Интересующийся
Отправить личное сообщение для Launder Посмотреть профиль Найти все сообщения от Launder
 
Регистрация: 25.04.2019
Сообщений: 19

Где хранится переменная в замыкании, в случае конструктора?
Допустим у нас есть код:
function User(fullName)
	{
          var fullArr = fullName.split(' ');  //делаем массив
          
          Object.defineProperty(this, 'firstName',          
          		{
              		       get: function()
                   		    {
                              		 return fullArr[0]; //выдаём первый элемент массива
                                    },
                               set: function(value)
                   		    {
                              		 fullArr[0] = value; // записываем первый элемент массива
                                    }

                        } );
          Object.defineProperty(this, 'lastName',          
          		{
              		       get: function()
                   		    {
                              		 return fullArr[1]; //выдаём второй элемент массива
                                    },
                               set: function(value)
                   		    {
                              		 fullArr[1] = value; //записываем второй элемент массива
                                    }
                         } );
          Object.defineProperty(this, 'fullName',          
          		{
              		       get: function()
                   		    {
                              		 return fullArr[0] + ' ' + fullArr[1]; //выдаём весь массив, через пробел
                                    },
                               set: function(value)
                   		    {
                                         fullArr = value.split(' '); //записываем массив из строки
                                    }
                         } );
	}

var vasya = new User("Василий Тёркин");
var masha = new User("Мария Шарапова");

Итак у нас два разных пользователя. Они, насколько я понимаю, ничем друг другу не мешают. Но мне до конца не понятен механизм их образования: оператор new генерирует создание нового объекта, функция выполняется и выдаёт этот новый объект. Но! Массив fullArr где хранится? если он лежит в функции(конструкторе) User и находится через замыкание, то тогда эти два экземпляра должны мешать друг другу, перезаписывая значения друг друга. Если они не мешают друг другу, значит этот массив каким-то образом принадлежит объекту, но где "там" он лежит?... Спасибо.
Ответить с цитированием