Как передать 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) {
    //...
  }
}

→ Ссылка