Ссылочный тип 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, время: 12:33. |