작성
·
46
0
init() {
window.addEventListener('scroll', () => {
this.scrollRunHandler();
this.scrollPosition(this.mainElem);
});
}
scrollRunHandler() {
clearTimeout(this.scrollState);
if (!this.scrollState) {
this.mainElem.classList.add('running');
}
this.scrollState = setTimeout(() => {
this.scrollState = false;
this.mainElem.classList.remove('running');
}, 500);
}
scrollPosition = (elem) => {
if (elem.lastScrollTop > window.scrollY) { // 스크롤을 아래로
this.mainElem.dataset.direction = 'backward';
} else { // 스크롤 위로
this.mainElem.dataset.direction = 'forward';
}
elem.lastScrollTop = window.scrollY;
}
생성자 함수를 클래스 함수로 변경하면서 this가 character를 가리켜야 되는데 window를 가리키는 문제가 생겨서 변수를 그냥 넣어줘서 작동은 하는데 이렇게 하는게 맞는지 궁금합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. samkookji12님.
클래스에서 this
는 항상 클래스의 인스턴스를 가리키도록 설정되어야 합니다. 화살표 함수(=>
)를 사용하면 this
는 함수가 정의된 곳의 상위 스코프에서 값을 가져오기 때문에, window
가 아닌 현재 클래스의 인스턴스를 가리킵니다. 보내주신 코드에서는 이미 init()
함수 내의 이벤트 리스너와 scrollState
변수 초기화에 화살표 함수를 사용하고 있기에, this
가 문제없이 클래스의 인스턴스를 가리켜야 합니다.
이 문제를 해결하기 위해 다음을 확인할 수 있습니다:
init()
함수 내에 사용된 이벤트 리스너 코드가 화살표 함수로 선언되어 있어 this
는 클래스의 인스턴스를 참조합니다.
scrollPosition
함수에서는 함수 표현식이 잘못 인식될 가능성이 없습니다. 화살표 함수로 선언되어 this
가 올바르게 바인딩되고 있습니다.
해당 코드 내에서 this
바인딩 문제를 해결하기 위한 올바른 접근 방법을 사용하고 있습니다.
관련한 비슷한 질문과 답변을 찾아보면 도움이 될 수 있습니다:
또 다른 도움이 필요하시다면 언제든지 질문해 주세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.