Javascript + Typescript/이론과 문법
이벤트 핸들러 this 오류
치춘
2022. 9. 21. 01:27
이벤트 핸들러 this 오류
문제
클래스 안에 있는 메서드를 핸들러로 부착하니 클래스의 멤버 변수들을 찾지 못하는 상황이 발생했다
처음에는 메서드가 프라이빗 메서드라 그런 건가? 싶어서 이리저리 고쳐봤는데, 알고 보니 this
가 클래스 인스턴스를 가리키지 않고 이벤트가 걸린 요소를 가리켜서 그런 것이었다
원인
https://developer.mozilla.org/ko/docs/Web/API/EventTarget/addEventListener
MDN 문서에 따르면 이벤트 수신기 (이벤트 핸들러) 의 this
는 이벤트가 걸린 대상 요소를 가리키게 된다고 한다 (= e.currentTarget
이 가리키는 요소와 같다)
디버깅하느라 별 짓을 다 했는데 이런 이유가 있었다
해결
DOM요소.addEventListener('click', this.핸들러이름.bind(this));
함수에 this
를 직접 바인딩해주는 것으로 문제를 해결할 수 있다
또는 인자로 this
를 넘겨주거나, 클로저를 활용하면 된다