Получение экземпляра класса из обратного вызова jquery

Как получить экземпляр MyClass в обратном вызове из jquery.

function MyClass(){      

  this.message = 'Hello World'; // I need access to this variable in the callback

  //registering class member function as callback
  $('div').draggable({drag:this.onDrag});

  this.onDrag = function(event,ui){

   alert(this.message); // 'this' is jquery object, not MyClass instance;

  }
}

PS Глобальная переменная с экземпляром MyClass или сохранение экземпляра в данные нежелательна.

Спасибо!

1 ответ

Решение

Лучший вариант здесь (IMO) - просто сохранить другую ссылку, я предпочитаю self, как это:

function MyClass(){      
  var self = this;
  this.message = 'Hello World'; // I need access to this variable in the callback

  //registering class member function as callback
  $('div').draggable({drag:this.onDrag});

  this.onDrag = function(event,ui){    
    alert(self.message);
  }
}

Альтернатива заключается в том, чтобы связываться с контекстом другого плагина, который вы на самом деле не контролируете, когда (опять же, IMO) в этом нет необходимости, просто наличие другой ссылки для доступа к вашему классу так же просто и во многих случаях менее запутанно.

Другие вопросы по тегам