클래스 메소드 내에서 setTimeout 함수를 사용할 때 클래스 내 다른 메소드(예: , 제공된 코드의 "method2")는 시간 초과 후에 정의되지 않습니다. 이는 JavaScript가 중첩된 함수 내에서 this 키워드를 처리하는 방식 때문입니다.
예제 코드에서 setTimeout 함수는 지정된 지연과 함께 테스트 개체 내에서 메서드 함수를 호출하는 데 사용됩니다. method2 함수는 전달된 ID를 기반으로 이미지 요소를 검색하기 위해 메서드 함수 내에서 호출됩니다. 처음에는 문제 없이 작동합니다.
그러나 시간 초과 후에는 setTimeout 함수 내에서 바인딩되는 방식으로 인해 method2 함수가 정의되지 않습니다. 기본적으로 이는 setTimeout 내에서 콜백으로 호출될 때 전역 개체를 참조합니다.
이 문제를 해결하려면 setTimeout에 전달된 함수 끝에 .bind(this)를 추가하는 것이 해결책입니다. 이렇게 하면 this 컨텍스트가 개체(이 경우 테스트 개체)에 올바르게 바인딩됩니다. 수정된 코드에서:
<code class="js">test.prototype.method = function() { //method2 returns image based on the id passed this.method2('useSomeElement').src = "http://www.some.url"; timeDelay = window.setTimeout(this.method.bind(this), 5000); // ^^^^^^^^^^^ <- fix context };</code>
.bind(this)를 사용하면 method2 함수가 setTimeout 콜백 내에서 적절한 this 컨텍스트를 유지하여 이미지 요소를 성공적으로 검색하고 조작할 수 있습니다.
위 내용은 setTimeout을 사용할 때 JavaScript에서 'this'와 관련된 상황별 문제를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!