>웹 프론트엔드 >JS 튜토리얼 >setTimeout을 사용할 때 JavaScript에서 \'this\'와 관련된 상황별 문제를 처리하는 방법은 무엇입니까?

setTimeout을 사용할 때 JavaScript에서 \'this\'와 관련된 상황별 문제를 처리하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-24 11:02:29762검색

How to Handle Contextual Issues with

JavaScript의 setTimeout 및 "this"

클래스 메소드 내에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.