@YURY_PETRANKOV

Функция-конструктор. Где располагаются ее public свойства в памяти на run-time?

Создадим простую функцию-конструктор:
function User(firstName) {
    this.firstName = firstName;
    this.sayHi = function () {
        console.log('Hi, my name is ' + this.firstName);
    };
}


Разумеется, что мы не может написать следующий код:

console.log(User.firstName); //undefined
console.log(User.sayHi);     //undefined


Давайте нарисуем, как в памяти интерпретатор создаст наш объект функции-конструктора:

2a9b2ceec07a4fc7848ae933ad58c41b.png

Понятно, что свойства prototype, name, length and arguments это стандартные свойства, создаваемые интерпретатором по умолчанию. Так же понятно, что в объекте функции нет наших полей firstName и sayHi.

Отсюда вопрос, где в памяти интерпретатор хранит эти поля? Или он вообще не компилирует тело функции конструктора, пока не наткнется на код вида:

var user = new User('Bob');
  • Вопрос задан
  • 2493 просмотра
Пригласить эксперта
Ответы на вопрос 1
Гмм. Тяжелый случай. Ваш конструктор - пример плохого дизайна. sayHi должен храниться в прототипе конструктора - тогда он вам и будет доступен через прототип без создания инстанса. А в вашем же случае программа тратит время на создание метода и память для хранения метода на каждый инстанс, а не одного, на все инстансы конструктора. И - да, в вашем примере и firstName, и sayHi не инициализируются до исполнения конструктора и нигде не хранятся в памяти.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы