Пользовательские методы вызова методов с setTimeout теряют область видимости

У меня проблема с созданием объекта Javascript и вызовом методов внутри этого объекта с использованием setTimeout. Я пробовал различные обходные пути, но всегда во время второй части моего цикла область видимости становится объектом окна, а не моим пользовательским объектом. Предупреждение: я довольно новичок в JavaScript.

мой код:

$(function() {
 slide1 = Object.create(slideItem);
 slide1.setDivs($('#SpotSlideArea'));
 slide1.loc = 'getSpot';
 slide2 = Object.create(slideItem);
 slide2.setDivs($('#ProgSlideArea'));
 slide2.loc = 'getProg';
 slide2.slide = 1;
 setTimeout('triggerSlide(slide1)', slide1.wait);
 setTimeout('triggerSlide(slide2)', slide2.wait);
});

function triggerSlide(slideObject) {
 slideObject.changeSlide(slideObject);
}

var slideItem = {
 div1: null,
 div2: null,
 slide: 0,
 wait: 15000,
 time: 1500,
 loc: null,
 changeSlide: function(self) {
  this.slide ? curDiv = this.div1:curDiv = this.div2;
  $(curDiv).load(location.pathname + "/" + this.loc, this.slideGo(self));
 },
 setDivs: function(div) {
  var subDivs = $(div).children();
  this.div1 = subDivs[0];
  this.div2 = subDivs[1];
 },
 slideGo: function(self) {
  if(this.slide) {
   $(this.div2).animate({
    marginLeft: "-300px"
   }, this.time);
   $(this.div1).animate({
    marginLeft: "0"
   }, this.time);
   setTimeout('triggerSlide(self)', this.wait);
  } else {    
   $(this.div1).animate({
    marginLeft: "300px"
   }, this.time);
   $(this.div2).animate({
    marginLeft: "0"
   }, this.time);
   setTimeout('triggerSlide(self)', this.wait);
  }   
  this.slide ? this.slide=0:this.slide=1;
 }
}

Моей последней попыткой было создание вспомогательной функции triggerSlide, чтобы я мог пытаться передать ссылку на объект через мои методы, но даже это, похоже, не работает.

Я мог бы использовать setInterval, и это работает, однако:

Я хочу убедиться, что анимация завершена до перезапуска таймераЯ не учусь, как обойти проблему таким образом. :)

Ответы на вопрос(3)

Ваш ответ на вопрос