На данный вопрос уже ответили:
var user = {
name: "Вася",
hi: function() { alert(this.name); },
bye: function() { alert("Пока"); }
};
user.hi(); // Вася (простой вызов работает)
// а теперь вызовем user.hi или user.bye в зависимости от имени
(user.name == "Вася" ? user.hi : user.bye)(); // undefined
user.hi() из точки Reverence Type мы получаем
base - имя объекта со значением name - имя свойства и вызываем в контексте
base.user.hi или user.bye тут непонятно почему получаем undefined.Этот код:
(user.name == "Вася" ? user.hi : user.bye)(); // undefined
эквивалентен
var temp = (user.name == "Вася" ? user.hi : user.bye);
temp();
При вызове функции temp() - user в качестве контекста вызова (то, что будет this внутри функции) - потерян. Контекстом вызова становится глoбальный объект window.
var user = {
name: "Вася",
hi: function() { console.log(this.name); },
bye: function() { console.log("Пока"); }
};
user.hi(); // Вася (простой вызов работает) - контекст вызова - user
// а теперь вызовем user.hi или user.bye в зависимости от имени
var method = user.hi;
method(); // вот почему: контекст вызова - window
method.call(user); // контекст вызова - user
method.bind(user)(); // контекст вызова - user
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости