Answer
t.me/js_testОтвет:
John undefined
Обьяснение:
Почему user2.name приняло значение undefined?
Рассмотрим, как отработал вызов new user.constructor('Pete'):
- Сначала ищется свойство
constructorв объектеuser. Не нашлось. - Потом задействуется поиск по цепочке прототипов. Прототип объекта
user– этоUser.prototype, и там тоже нет искомого свойства. - Значение
User.prototype– это пустой объект{}, чей прототип –Object.prototype.Object.prototype.constructor == Object. Таким образом, свойствоconstructorвсё-таки найдено.
Наконец срабатывает let user2 = new Object('Pete'), но конструктор Object игнорирует аргументы, он всегда создаёт пустой объект: let user2 = {} – это как раз то, чему равен user2 в итоге.
Код для проверки:
function User(name) {
this.name = name;
}
User.prototype = {};
let user = new User('John');
let user2 = new user.constructor('Pete');
console.log(user.name);
console.log(user2.name);