> 웹 프론트엔드 > JS 튜토리얼 > 이벤트 핸들러에서 화살표 함수를 사용할 때 `this`가 예기치 않게 동작하는 이유는 무엇입니까?

이벤트 핸들러에서 화살표 함수를 사용할 때 `this`가 예기치 않게 동작하는 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-03 03:24:03
원래의
817명이 탐색했습니다.

Why does `this` behave unexpectedly when using arrow functions in event handlers?

JavaScript - 화살표 함수 및 이벤트 핸들러

화살표 함수를 이벤트 핸들러에 대한 콜백으로 사용할 때 함수 내 this 값은 예상치 못한 것입니다. 이 블로그 게시물에서는 이러한 동작의 이유를 설명하고 event.currentTarget을 사용하여 의도한 요소에 액세스하는 솔루션을 제공합니다.

화살표 함수 및 어휘 범위

일반 함수와 달리 화살표 함수에는 속성이 없습니다. 이에 대한 자신의 맥락이나 범위. 대신, 주변 컨텍스트의 어휘 범위를 상속합니다. 제공된 예에서 화살표 함수는 dom.videoLinks의 클릭 이벤트 핸들러 내에서 정의됩니다. 따라서 화살표 함수 내의 이는 dom.videoLinks 요소를 참조합니다.

이벤트 리스너 및 event.currentTarget

이벤트 리스너는 특정 요소에 연결되며 특정 이벤트가 발생할 때 실행됩니다. 이벤트가 트리거되면 이벤트 개체에는 이벤트를 트리거한 대상 요소와 이벤트 리스너가 연결된 현재 대상 요소에 대한 정보가 포함됩니다.

event.target 속성은 이벤트를 직접 발생시키는 요소를 참조합니다. 이벤트를 촉발시켰습니다. 대부분의 경우 클릭되거나 마우스 오버되거나 포커스를 받은 요소입니다.

반면 event.currentTarget 속성은 이벤트 리스너가 연결된 요소를 나타냅니다. 실행 시 이벤트가 처리되는 요소입니다.

애로우 함수에서 event.currentTarget 사용

애로우 함수 이벤트 핸들러 내에서 의도한 요소에 액세스하려면 이벤트를 사용하세요. .currentTarget 대신 사용하세요. 코드의 수정된 버전은 다음과 같습니다.

<code class="javascript">dom.videoLinks.click((e) => {
  e.preventDefault();
  console.log($(e.currentTarget));
  var self = $(e.currentTarget),
      url = self.attr(configuration.attribute);

  eventHandlers.showVideo(url);

  // Deactivate any active video thumbs
  dom.videoLinks.filter('.video-selected').removeClass('video-selected');

  // Activate selected video thumb
  self.addClass('video-selected');
});</code>
로그인 후 복사

.currentTarget 대 .target

일반적으로 이벤트 핸들러로 작업할 때 event.target보다 event.currentTarget을 사용해야 합니다. 이는 이벤트가 DOM 트리를 버블링하거나 캡처할 수 있고, event.target을 사용하면 항상 대상으로 삼으려는 요소를 참조하지 않을 수 있기 때문입니다.

event.currentTarget은 이벤트 리스너가 있는 요소를 일관되게 참조합니다. 이벤트 흐름에 관계없이 첨부됩니다.

결론

이벤트 핸들러에서 화살표 기능을 사용할 때 의도한 요소에 액세스하려면 event.currentTarget을 사용하는 것을 기억하세요. 정확한 이벤트 처리를 보장하려면 이벤트 버블링 및 캡처 작업을 할 때 event.target과 event.currentTarget의 차이점을 염두에 두세요.

위 내용은 이벤트 핸들러에서 화살표 함수를 사용할 때 `this`가 예기치 않게 동작하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿