2016-07-25 2 views
0

window.setInterval() 메서드에 문제가 있습니다. 아래는 구조의 예입니다. "repeat"메서드는 반복적으로 호출되지만, "repeat"내부의 메서드는 호출 할 수 없습니다. 위 예제에서 관리자 (m = new manager()라고 함)를 인스턴스화하면 "Before Print"가 인쇄되지만 printStuff 메서드 또는 "After Print"메시지에서 로그가 인쇄되지 않습니다.타이프 스크립트 window.setInterval()이 제대로 작동하지 않습니다.

왜 이런 일이 일어나는 지 알고 계십니까? 분명히 이것은 실제 코드가 아니기 때문에 별도의 함수에 있지 않아도 충분합니다. 그러나 실제 코드는 "반복"함수에서 많은 함수를 호출해야하며 다른 함수를 호출 할 때 실행을 중지합니다.

class manager{ 

constructor(){ 
    window.setInterval(this.repeat, 5000); 
} 

repeat(){ 
    console.log("Before Print"); 
    this.printStuff(); 
    console.log("After Print"); 
} 

printStuff(){ 
    console.log("Print Stuff"); 
} 
+0

시도를 사용하는 방법을 명시 적으로 '바인딩'에 필요한 컨텍스트 밖으로 this.repeat을 취할 것입니다 'setInterval (this.repeat.bind (this), 5000)'- 콘솔에서 오류 메시지를 확인 했습니까? 나는'printStuff'에 대한 무언가가'undefined '라고 기대합니다. 왜냐하면'this'는 여러분이 생각하는 것과 다르므로 ... – nnnnnn

+0

이 질문은 백 번 부탁되었습니다. 더 세게 찾으십시오. '이'가 어떻게 작동하는지에 관해서는 읽을 수 있습니다. –

+0

http://stackoverflow.com/questions/37802436/why-does-method-on-object-loose-correct-this-binding-in-settimeout을 참조하십시오. –

답변

5

설정 간격은

setInterval(this.repeat.bind(this), 5000)

또는

setInterval(()=>this.repeat(), 5000)

+0

'setInterval'은 문맥 밖으로 아무것도 가져 가지 않습니다. 문맥은 당신이'this.repeat'라고 말하면 빠져 나옵니다. –

+0

시간이 참이 아니라면 모두 함수 실행 컨텍스트를 다시 할당합니다. 함수를 명시 적으로 바인딩하지 않는 한 이것이 아무 의미가없는 이유는 무엇입니까? –

+0

사용자의 설명을 구문 분석 할 수 없습니다. 아무것도 다시 할당되지 않습니다. 'this.repeat' 값은 시작할 컨텍스트가 없습니다. –

관련 문제