Показать сообщение отдельно
  #2 (permalink)  
Старый 07.01.2018, 21:10
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,586

Во первых: не
button.onclick=newClass.show();
а
button.onclick=newClass.show;
потому что скобочки в конце метода это уже вызов, вот прям сейчас, на месте.

Во вторых: в современном js есть медот функции bind, это именно то о чём вы спросили:
button.onclick=newClass.show.bind(newClass);
Но по сути он аналогичен тому самому первому созданию новой функции изнутри которой вызывается метод в правильном контексте.

И в-третьих: многие пользуются всяческими вариациями привязки this, однако это всё в современном js на самом деле костыли.
Единственный верный вариант(на мой взгляд), это использовать addEventListener и передавать ему не функцию но сам объект, имеющий метод handleEvent:
function NewClass() {
 
    this.show= function() {
        alert("Some message");
    }
}
NewClass.prototype={
  handleEvent: function(event){
    switch(event.type){
      case 'click':
        this.show(event);
      break;
      //...
    }
  }
}
button=document.querySelector('input[type=button]');
newClass= new NewClass;
button.addEventListener('click', newClass);
Таким образом прекрасно отделяется обработка событий от всего остального, и попутно решается проблема с this, как будто её и нет.
__________________
29375, 35

Последний раз редактировалось Aetae, 07.01.2018 в 21:14.
Ответить с цитированием