Функция-конструктор — это обычная функция со следующими соглашениями:

  • Имя функции-конструктора начинается с заглавной буквы.
  • Функцию конструктора следует вызывать только с оператором new.

По сути, новый оператор делает следующее в приведенном выше коде:

  • Создает пустой объект и назначает его этому.
  • Присваивает аргументы «John», «Cena» свойствам firstName и lastName.
  • Верните этозначение.

Функция конструктора позволяет создавать несколько похожих объектов.

пусть person1 = новый человек («Джеймс», «Смит»);

пусть person2 = новый человек («Рохит», «Шарма»);

Добавление методов в функцию-конструктор

Объект может иметь методы, которые манипулируют его данными. Чтобы добавить метод к объекту, созданному с помощью функции-конструктора, вы можете использовать ключевое слово this.

Проблема с функцией конструктора заключается в том, что когда вы создаете несколько экземпляров Object Person, this.getName() дублируется в каждом экземпляре. Это не эффективно для памяти.

Чтобы решить эту проблему, вы можете использовать прототип, чтобы все экземпляры пользовательского типа могли совместно использовать одну и ту же память.

Функция конструктора возвращаемой формы

Если return вызывается внутри объекта, функция конструктора возвращает этот объект вместо этот.

Если возврат вызывается со значением, отличным от объекта, он игнорируется.

Вызов функции-конструктора без нового ключевого слова

let person= Person("Джон","Сена");

В этом случае Person просто выполняется как обычная функция. Таким образом, thisвнутренний объект Person не привязан к переменной person, а привязан к глобальному объекту.

Если вы попытаетесь получить доступ к свойствам объекта, вы получите ошибку типа.

console.log(person.firstName) //Ошибка: невозможно прочитать свойства неопределенного

Чтобы предотвратить вызов функции конструктора без нового ключевого слова, в ES6 было введено свойство new.target.

Если функция-конструктор вызывается с новым ключевым словом, new.target возвращает ссылку на функцию. В противном случае возвращается значение undefined.