На данный вопрос уже ответили:
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
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть такой участок кода на сервереВыполняется скрипт к бд и получаются данные в ответ
Вызываю функцию addListener из библиотеки WebMidi, третий параметр называется 'listener'Требуется, чтобы этот параметр был функцией (В моём случае это...