세 번째 방법은 DOM2 수준 이벤트 처리 방법인 addEventListener 및 RemoveEventListener를 사용하는 것입니다. IE 브라우저에 해당하는 방법은 attachmentEvent 및 detachEvent입니다. 이벤트를 등록하는 코드는 다음과 같습니다.
위의 세 가지 방법을 통해 입력 요소에 대한 클릭 이벤트 핸들러를 등록할 때의 한 가지 단점은 이 핸들러(this)의 범위가 항상 입력 개체 내에 있다는 것입니다. 객체지향 프로그래밍에서는 특정 범위에서 이를 명시적으로 지정해야 합니다. 이 범위를 변경하려면 js의 바인딩 기능 기술을 사용해야 합니다. 소위 "바운드 함수"는 특정 환경에서 지정된 매개변수로 다른 함수를 호출할 수 있는 함수를 생성하는 것입니다. 함수를 변수로 전달하면서 함수를 유지하는 데 사용할 수 있습니다. 함수의 범위(또한 이것의 실행 환경). 바인딩 함수의 정의 형태는 다음과 같습니다.
function bin( fn,scope) { return fn.apply(scope||this,arguments) }
이 바인딩 함수는 첫 번째 매개변수 두 개를 허용합니다. 함수를 실행해야 하며, 두 번째는 특정 실행 환경으로, 주어진 범위에서 주어진 함수를 호출하고 모든 매개변수를 함께 전달하는 함수를 반환합니다. 바인딩 기능 기술과 DOM2 수준 이벤트 핸들러를 사용하면 특정 범위에서 실행되는 요소에 대한 이벤트 핸들러를 등록할 수 있습니다. 구체적인 처리 방법은 다음과 같습니다. 먼저 앞서 정의한 등록 이벤트 방법을 다음과 같이 수정하세요.
위 코드가 실행되면 핸들러 eventHandler의 this 범위는 window 객체 아래에 있습니다.
앞서 소개한 바인딩 기능을 통한 이벤트 등록은 이벤트 핸들러를 저장하기 위해 요소 객체에 대한 이벤트 해시 객체를 생성합니다. 이 해시 객체는 긴급 상황이 발생하면 해당 요소가 이벤트 핸들러를 제거할 때 시작됩니다. 상황에 따라 해당 이벤트 핸들러를 정확하게 제거할 수 있습니다. 이벤트 핸들러를 제거하는 코드는 다음과 같습니다.