Ссылочный тип this
https://learn.javascript.ru/object-m...ssylochnyy-tip
Подскажите чтобы данный пример (первый в разделе Ссылочный тип) сработал нужно (user.name == "Вася" ? user.hi : user.bye)();изменить в user.name == "Вася" ? user.hi() : user.bye();чтобы всё заработало, правильно ? |
Цитата:
var user = {
name: "Вася",
hi: function() { alert(this.name); },
bye: function() { alert("Пока"); }
};
user.hi(); // Вася (простой вызов работает)
// а теперь вызовем user.hi или user.bye в зависимости от имени
user.name == "Вася" ? user.hi() : user.bye();
user[(user.name == "Вася" ? "hi" : "bye")]();//ещё вариант
|
Я хотел не могу понять причину по которой первая строка не работает, а вторая работает. Я знаю что там есть объяснение но мне не совсем понятно. Заранее спасибо
|
Кирилл Margheriti,
причина в том что вызов методов обязательно со скобками хотите чтобы работало без скобок? сделайте геттором
var user = {
name: "Вася",
get hi(){ alert(this.name); },
get bye(){ alert("Пока"); }
};
user.name == "Вася" ? user.hi : user.bye;
|
j0hnik,
вопрос был про this! Кирилл Margheriti, (user.name == "Вася" ? user.hi : user.bye)();потому что эта строка "достаёт" функции из обьекта, так
(user.name == "Вася" ? function() { alert(this.name); } : function() { alert("Пока"); })();
и this тут уже скорее будет window, а user. на форуме есть несколько тем про this, надо искать, там более профессионально изложено. |
Цитата:
И всё зависит от того, что с этим результатом делается на следующем шаге. Если делается вызов функции, то контекст используется по назначению, попадает в this. Во второй строке как раз этот случай. А если любое другое действие, то контекст отлетает, остаётся только функция. Например, у тебя в первой строке действие над результатом user.hi - передача его в операцию ?: |
| Часовой пояс GMT +3, время: 10:21. |