0

Начал изучать JavaScript недавно. Сейчас изучаю методы объекта и не могу понять как работает код:

"use strict";

let user = { name: "Джон", hi() { console.log(this.name); }, bye() { console.log("Пока"); } };

user.hi();

(user.name == "Джон" ? user.hi : user.bye)(); // Именно выполнение этой строки

Как эту строку превратить в условие IF...ELSE и почему при вызове мы теряем this? он получает undefined.

  • 1
    https://learn.javascript.ru/object-methods тут же вроде всё расписано – Alexey Ten Apr 10 '21 at 17:36
  • код эквивалентен следующему: var func = user.name == "Джон" ? user.hi : user.bye; func(); – Grundy Apr 10 '21 at 17:46

1 Answers1

-1
(user.name == "Джон" ? user.hi : user.bye)();

Данная конструкция использует тернарный оператор. В первых скобках у вас возвращается строка, которая содержит объект и название метода. Переписать в if-else вариант можно так:

if(user.name == "Джон") {
   user.hi();
} else {
   user.bye();
}

this у вас находится в контексте объекта и доступен только в нем.

  • Ваш код не эквивалентен исходному – Alexey Ten Apr 10 '21 at 17:33
  • В if-else я переписал точно также, но результат выполнения разный. В случае с () ? : выдает то что переменная name = undefined, а в случае с if-else такой ошибки нет. – Looming Apr 10 '21 at 17:36