@genew

Как правильно инициализировать объект класса в JS?

Делаю класс
function MyClass() {
   this.init = function() {
      $("div.myclass").click(function() { myclick(); })
   };
   this.myclick = function() {
      alert("myclick");
   };
}


В коде пишу:
var myclass = new MyClass();
myclass.init();


Однако при клике на div получаю ошибку, что функция не найдена.
Если в методе init написать так:
$("div.myclass").click(function() { myclass.myclick(); })
, то все работает.
Но как быть, если я не знаю в какой переменной будет мой объект?
  • Вопрос задан
  • 512 просмотров
Решения вопроса 1
Gomerkucher
@Gomerkucher
Frontend developer
Обращайтесь к функции так me.myclick(). В этом случае ссылка на экземпляр класса будет сохранена. А me объявите в конструкторе. Спасибо fetis25.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@fetis26
Ну, за фронтенд!
var myclass = new MyClass();

еще нужно init поменять
function MyClass() {
  var _this = this;

  this.myclick = function() {
      alert("myclick");
   };

  $("div.myclass").click(_this.myclick)

}


но это достаточно старый подход. лучше использовать ES6
Ответ написан
mlnkv
@mlnkv
JavaScript Developer
зачем писать init() если вся функция и есть та самая функция, которая выполнится при инициализации
function MyClass() {
  $("div.myclass").click(this.myclick)
}
MyClass.prototype.myclick = function() {
  alert("myclick")
}


либо
function MyClass() {

  var self = this

  $("div.myclass").click(function() {
    self.myclick()
  })
}
MyClass.prototype.myclick = function() {
  alert("myclick")
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы