Как передать this в стрелочной функции, внутри класса?
Не смог найти ответа, просьба не отмечать как дубликат. Задача такая. Внутри класса мне нужно, сделать onclick событие, узнать на какой именно элемент было кликнуто и далее использовать внутриклассовую функцию. Уже устал искать ответ.
class tt {
hookLinks(targetsObj = new Targets(), MessagesObj = new Messages(0, 0)) {
$(document).on('click', '.dialog-cl', (e) => { //here стрелочная функция, глобальное событие, дабы append/html/prepend стабильно работал
e.preventDefault();
let userID = $(this).data('uid'); //error
///<div class='dialog-cl' data-uid='324'></div>
//Как мне извлечь нужный айдишник отсюда??? Если внутри стрелочной функции this - родительский. Может аналог есть какой?
alert(userID); //userID undefined
this.openDialog(targetsObj, MessagesObj, userID); //тут же все ок, за исключением что под userid передается undefined
});
}
openDialog(targetsObj = new Targets(), MessagesObj = new Messages(0, 0), userID) {
/////////codeee
}
}
Ответы (1 шт):
Автор решения: OPTIMUS PRIME
→ Ссылка
Стрелочная функция использована не по назначению: У неё нет собственного «this». Решениие — испольлзовать обычную функцию. А к методам класса можно обращаться через внешнюю переменную.
class tt {
hookLinks(targetsObj = new Targets(), MessagesObj = new Messages(0, 0)) {
let SELF = this;
$(document).on('click', '.dialog-cl', function (e) {
e.preventDefault();
let userID = $(this).data('uid');
alert(userID);
SELF.openDialog(targetsObj, MessagesObj, userID);
});
}
openDialog(targetsObj = new Targets(), MessagesObj = new Messages(0, 0), userID) {
//...
}
}