>  기사  >  웹 프론트엔드  >  `addEventListener`를 사용하여 이벤트 핸들러 내에서 \'this\' 값을 어떻게 제어할 수 있습니까?

`addEventListener`를 사용하여 이벤트 핸들러 내에서 \'this\' 값을 어떻게 제어할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-29 05:38:30243검색

 How Can I Control the Value of

addEventListener를 사용하는 핸들러 내 "this"의 값

addEventListener 메소드를 사용하여 이벤트를 처리할 때 핸들러 함수 내 "this"의 값은 다음과 같습니다. 혼란의 근원. 기본적으로 "this"는 이벤트를 발생시킨 요소를 나타냅니다. 그러나 이 동작을 수정하고 "this"가 원하는 개체를 참조하는지 확인하는 기술이 있습니다.

ticketTable 개체를 사용하는 특정 예에서는 handlerCellClick 함수 내에서 문제가 발생합니다. 이벤트 핸들러로 호출될 때 "this"는 ticketTable 개체가 아닌 클릭 이벤트를 수신한 요소를 가리킵니다.

이 문제를 해결하려면 값을 지정할 수 있는 바인딩 메서드를 활용하면 됩니다. 특정 기능에 대한 "this"입니다. "this"를 ticketTable 개체에 바인딩하면 "this"가 handlerCellClick 함수 내에서 올바른 개체를 참조하는지 확인할 수 있습니다. 다음은 이를 보여주는 업데이트된 버전의 코드입니다.

<code class="js">ticketTable.prototype.render = function(element) {
  // ...

  // Bind "this" to ticketTable object for handleCellClick function
  cell1.addEventListener("click", this.handleCellClick.bind(this), false);

  // ...
}

ticketTable.prototype.handleCellClick = function() {
  // Now, "this" references the ticketTable object within the handler
  alert(this.tickets.length);
}</code>

"this"를 ticketTable 개체에 바인딩하면 의도한 대로 handlerCellClick 함수 내에서 해당 속성과 메서드에 액세스할 수 있습니다.

또는 handlerEvent 함수를 사용하여 이벤트를 포착하고 "this" 값을 명시적으로 정의할 수 있습니다.

<code class="js">ticketTable.prototype.handleEvent = function(event) {
  switch (event.type) {
    case "click":
      // "this" references the ticketTable object
      alert(this.tickets.length);
      break;
    // ...
  }
}</code>

이 경우 "this"는 이벤트를 처리할 때 항상 ticketTable 객체를 참조합니다. 이벤트를 발생시킨 요소와 관계없이

위 내용은 `addEventListener`를 사용하여 이벤트 핸들러 내에서 \'this\' 값을 어떻게 제어할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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