문제

이 코드가 바로 여기에 있습니다.http://pastie.org/534470

그리고 109 행에서 나는 "typeerror : 표현의 결과 'this.AllVarsDefined'[undrefined]는 함수가 아닙니다."라는 오류가 발생합니다.

JavaScript의 범위는 나에게 혼란 스럽습니다. 아무도 내 문제가 무엇인지 볼 수 있습니까? 또한 JavaScript의 범위에 대해 배우는 데 도움이되는 기사를 알고 있습니까? 이것은 정말로 JS를 실제로 사용하는 것이 처음입니다. :)

도움이 되었습니까?

해결책

이것은 프로토 타입 기반으로 보입니다. 다음과 같은 알림 콜백을 설정해야 할 것입니다.

setTimeout(this.notify.bind(this), 5000, track);

Notify 함수가 스크로 블러 객체에 바인딩되어 this 시간 초과가 발생할 때 기능을 트리거하는 이벤트 대신 스크로 블러 객체로 설정하십시오.

프로토 타입을 사용하는 것이 잘못되면 아마도 동일한 효과를 달성 할 수 있습니다.

var that = this;
setTimeout( function() { that.notify(); }, 5000, track );

다른 팁

라인 109를 변경해보십시오

setTimeout(this.notify, 5000, track);

에게

setTimeout(function(){this.notify()}, 5000, track);

이것이해야 할 일은 "이"변수를 포함하는 "closure"(function () {this.notify ()})를 작성하는 것입니다.

기존 코드의 문제는 "this.notify"를 작성할 때 객체의 인스턴스에서 함수를 잡아 당기고 설정 타임 아웃으로 전달했지만 객체 자체에 대한 정보를 전달하지는 않았다는 것입니다. 알림 함수가 "this"를 언급하지 않으면 괜찮을 것입니다. 그러나 "this"를 참조하기 때문에 클로저를 사용해야합니다.

JavaScript 폐쇄에 대해 더 많이 읽으면 혜택을 볼 수 있습니다. 여기에 있습니다 괜찮은 기사. 나는 또한 위대한 책을 추천합니다 Java Script : Definitive Guide 5th Edition O'Reilly에 의해. 50 달러와 비슷하지만 잘 쓰여져 있으며 JavaScript에서 웹 앱을 작성하려는 경우 엄청나게 도움이됩니다.

내 솔루션이 작동하지 않으면 코드를 작동하고 작동하지 않는 가장 기본적인 것까지 코드를 단순화 한 다음 여기에 게시하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top