Вызов функции-прототипа наследования Javascript

Есть вопрос о вызове одной функции-прототипа в другой функции-прототипе.

например, допустим, у меня есть базовый слайдер с двумя функциями-прототипами.

function Slider() {

}

Slider.prototype.transition = function() {

}

Slider.prototype.setTargets = function() {

}

Как правильно вызывать функцию setTargets внутри функции перехода, примерно так:

Slider.prototype.transition = function() {
   this.target.fadeOut('normal', function() {
      // call setTargets?  
      this.setTargets(); // errors when i do this
   });
}

Спасибо за помощь

2 ответа

Решение

Если this.target является объектом jQuery обратным вызовом fadeOut будет вызван с this в качестве DOMNode.

Сделайте это вместо этого:

Slider.prototype.transition = function() {
   var me = this;
   this.target.fadeOut('normal', function() {
      me.setTargets(); // <-- See me
   });
}

Я выбрал имя thatme за все мои инициализированные ссылки на this, Я никогда не пользовалась thatme для доменных узлов и т. д. имеет смысл для меня.

Пожалуйста, смотрите комментарии для дальнейших взглядов по этому вопросу.

РЕДАКТИРОВАТЬ:

На самом деле я использовал me не that - Не знаю, что я думаю??!


И для комментария:

Slider.prototype.transition = function() {
   var me = this;
   this.target.fadeOut('normal', function() {
      var domThis = this;
      me.setTargets(); // <-- See me
      setTimeout(function() {
          // Use domThis [Dom Node]
      }, 123);
   });
}

Или же:

Вы можете сделать объект jQuery из этого:

      var $this = $(this);
      me.setTargets(); // <-- See me
      setTimeout(function() {
          // Use $this [jQuery Object]
      }, 123);

Если вам нужен объект jQuery, вы можете обратиться к: me.target

      me.setTargets(); // <-- See me
      setTimeout(function() {
          // Use me.target [jQuery Object]
      }, 123);

fadeOut функция не вызывается в контексте вашего slider объект.

Slider.prototype.transition = function() {
    var slider = this;
    this.target.fadeOut('normal', function() {
        // call setTargets?  
        slider.setTargets(); // should work now.
    });
}
Другие вопросы по тегам