Какой результат выведет console.log при вызове getFullName у созданного объекта

Возникнет TypeError: member.getFullName не является функцией. Метод добавлен самому конструктору Person, а экземпляры ищут общие методы в Person.prototype.

Короткий ответ

Что ответить на собеседовании

Возникнет TypeError: member.getFullName не является функцией. Метод добавлен самому конструктору Person, а экземпляры ищут общие методы в Person.prototype.

Подробный разбор

Ответ с пояснениями

Условие

Предсказать, что будет напечатано в консоль после выполнения следующего JavaScript‑кода.

 function Person(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;

}

const member = new Person('Example1', 'Example2');
Person.getFullName = function () {
    return `${this.firstName} ${this.lastName}`;
}

console.log(member.getFullName());
// ??

Ответ

Возникнет TypeError: member.getFullName не является функцией. Метод добавлен самому конструктору Person, а экземпляры ищут общие методы в Person.prototype.

Исправление:

Person.prototype.getFullName = function () {
  return `${this.firstName} ${this.lastName}`;
};
console.log(member.getFullName()); // Example1 Example2

Это работает и для уже созданного member: его прототип — тот же объект Person.prototype. Статический Person.getFullName автоматически экземпляру не передаётся. Сам вызов console.log в исходнике не получает строку, потому что вычисление его аргумента завершается ошибкой.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее