Почему prototype не видит переменную из констуктора? learn.javascript.ru/play/HviXUb При клике на блок должно вывестись Hello World, но world = undefiend. Если просто в конструкторе вызывать this.hello(), то все работает --- пока из вариантов расматриваю такое решение, но может можно как-то еще?... var that = this; ... this.div.on('click', function(){ that.hello() }) ...
Да, использование переменной "that" для доступа к контексту объекта внутри функции обратного вызова - это довольно стандартный способ решения проблемы области видимости в JavaScript. Однако существуют и другие способы решения данной проблемы.
Один из таких способов - использование стрелочных функций ES6. Стрелочные функции не имеют собственной области видимости и вместо этого заимствуют контекст окружающего кода. В вашем случае, использование стрелочной функции вместо анонимной функции при обработке события клика могло бы выглядеть следующим образом:
this.div.on('click', () => { this.hello(); });
Таким образом, внутри стрелочной функции контекст будет совпадать с контекстом родительской функции (в данном случае, экземпляра объекта), и доступ к переменной "hello" не потеряется.
Также стоит заметить, что это не единственные способ решения данной проблемы, но стрелочные функции обычно предпочтительнее из-за их краткости и лаконичности.
Да, использование переменной "that" для доступа к контексту объекта внутри функции обратного вызова - это довольно стандартный способ решения проблемы области видимости в JavaScript. Однако существуют и другие способы решения данной проблемы.
Один из таких способов - использование стрелочных функций ES6. Стрелочные функции не имеют собственной области видимости и вместо этого заимствуют контекст окружающего кода. В вашем случае, использование стрелочной функции вместо анонимной функции при обработке события клика могло бы выглядеть следующим образом:
this.div.on('click', () => {this.hello();
});
Таким образом, внутри стрелочной функции контекст будет совпадать с контекстом родительской функции (в данном случае, экземпляра объекта), и доступ к переменной "hello" не потеряется.
Также стоит заметить, что это не единственные способ решения данной проблемы, но стрелочные функции обычно предпочтительнее из-за их краткости и лаконичности.