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);