Работа Reverence Type [дубликат]

128
17 июля 2019, 14:00

На данный вопрос уже ответили:

  • Не могу понять роль нуля в данном контексте. JS 1 ответ
  • Потеря контекста вызова 5 ответов

var user = { 
  name: "Вася", 
  hi: function() { alert(this.name); }, 
  bye: function() { alert("Пока"); } 
}; 
 
user.hi(); // Вася (простой вызов работает) 
 
// а теперь вызовем user.hi или user.bye в зависимости от имени 
(user.name == "Вася" ? user.hi : user.bye)(); // undefined

  1. user.hi() из точки Reverence Type мы получаем base - имя объекта со значением name - имя свойства и вызываем в контексте base.
  2. user.hi или user.bye тут непонятно почему получаем undefined.
Answer 1

Этот код:

(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

READ ALSO
Передача данных express.js

Передача данных express.js

Есть такой участок кода на сервереВыполняется скрипт к бд и получаются данные в ответ

142
Требуется зациклить анимацию

Требуется зациклить анимацию

Столкнулся с проблемой зацикливания анимация

142
Uncaught (in promise) TypeError: The 'listener' parameter must be a function

Uncaught (in promise) TypeError: The 'listener' parameter must be a function

Вызываю функцию addListener из библиотеки WebMidi, третий параметр называется 'listener'Требуется, чтобы этот параметр был функцией (В моём случае это...

115
Побитовое ИЛИ, проблемка

Побитовое ИЛИ, проблемка

Переписываю некий код с яваскрипта на пхп

136