ООП Javascript, получить атрибут класса, а не событие е - PullRequest
0 голосов
/ 14 ноября 2018

В обработчике событий из моего пользовательского класса я хочу использовать атрибут моего класса в методе закрытых событий.Нагляднее с этим простым примером:

class myClass {
  constructor() {
    this._customAtt = "hello";
  }

  foo() {
    this._addListeners();
  }

  _addListeners() {
    $("input.two").click(this._anEvent);
  }

  _anEvent(e) {
    console.log(this._customAtt); // print 'undefined'
    console.log(self._customAtt); // print 'undefined'
  }
}

var myIClass = new myClass();

$('input.one').on("click", function() {
  myIClass.foo();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type='button' value='one' class='one'>
<input type='button' value='two' class='two'>

Когда я нажимаю на кнопку one , я добавляю обработчик для кнопки two .Если я нажимаю на кнопку two , вызывается метод _anEvent, и из этого метода я хочу использовать класс закрытых атрибутов _customAtt.Но в методе _anEvent this - это событие e, а не мой класс.

Итак, как я могу получить атрибут _customAtt из метода _anEvent?

1 Ответ

0 голосов
/ 14 ноября 2018

Причина этого в том, что контекст this варьируется в зависимости от того, как вызывается функция, а не от того, к чему она была изначально присоединена.

Один из относительно простых способов сделать это - связать _anEvent с экземпляром класса.

constructor() {
    this._customAtt = "hello";
    this._anEvent = this._anEvent.bind(this);
}

Это гарантирует, что this всегдаэкземпляр myClass в функции _anEvent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...