javascript – 具有setTimeout的自定义对象调用方法失去作用域

前端之家收集整理的这篇文章主要介绍了javascript – 具有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.wait);
  }   
  this.slide ? this.slide=0:this.slide=1;
 }
}

我最近的尝试是构建helper函数triggerSlide,以便我可以尝试通过我的方法传递对象的引用,但即使这样似乎不起作用.

但是我可以使用setInterval,但是它可以使用:

>我想在定时器重新启动之前确保动画已经完成
>我不会学习如何解决这个问题.

猜你在找的JavaScript相关文章