2012-06-18 4 views
0

그래서 종종 "autoPlay"라는 구를 사용하여 즉시 시작되는 회전자를 설명하기 때문에 setInterval을 개체 속성으로 저장하고 싶습니다. 일련의 스크립트에서 "autoPlay"를 두 번 이상 사용하면 JS를 삭제하려고 시도 할 때 JS가 작동하지 않게됩니다. 내 치료법은 속성으로 어딘가에 넣는 것이므로 "newsRotator.autoPlay"와 같은 객체를 통해 액세스 할 수 있습니다. 이것은 예를 들어 내 시도 중 하나입니다개체 속성으로 setInterval 저장

autoPlay = setInterval(this.forwardSlide, 5000); 

객체 속성으로 저장시 : 문제는 보통과 같이 기본 변수에 배치됩니다 이후, 그것은 그런 식으로 저장하는 방법을 잘 모르겠어요입니다 , 이는 간격 취소 실패

var newsRotator = { 
    run: function() { 
     $('.arrow').on('click', function (e) { 
      e.preventDefault(); 
      clearInterval(newsRotator.autoPlay); 
      if ($(this).hasClass('back')) { 
       newsRotator.backSlide(); 
      } else { 
       newsRotator.forwardSlide(); 
      } 
     }); 
    }, 
    backSlide: function() { 
     (goes back one slide) 
    }, 
    forwardSlide: function() { 
     (goes forwardone slide) 
    }, 
    autoPlay: setInterval(this.forwardSlide, 5000), 
    init: function() { 
     this.run(); 
    } 
} 

newsRotator.init() 

답변

0

실제로 object constructor하지, 그래서 당신이 필요로하는 this 범위 지정을 만들지 않습니다. setTimeout가 호출되었을 때, this

다음과 같이 객체를 생성하려고 ... 당신이 참조하고있는 객체의 속성을 포함하지 않는 윈도우 객체를 참조 :

function NewsRotator() { ... }

그런 다음 new 하나의 인스턴스 :

var newsRotator = new NewsRotator();

을 다음, this 키워드 해당 특정 인스턴스로 범위가 지정됩니다.