2013-07-30 2 views
1

event 객체를 이벤트 처리기에서 다른 기능으로 전달하는 것은 좋지 않은 방법입니다.이벤트 처리기에서 다른 기능으로 이벤트 객체 전달

document.getElementById('something').addEventListener('mousedown', function(e) { 
    console.log(someAnotherFunction(e)); 
}); 

나는 이유는 모르겠지만, 나에게 이것은 코드 냄새처럼 보이는 : 예를 들어

?

+1

왜 :

document.getElementById('something').addEventListener('mousedown', doStuff); function doStuff(event) { var foo = event.target.getAttribute('foo'); console.log("doing stuff with " + foo); doMagic(foo); } 

당신은 그렇게 할 것 'addEventListener ('mousedown', someAnotherFunction)'을 (를) 실행 하시겠습니까? 로깅은 잃어 버렸지 만, 이런 식으로 실행하고자한다면'someAnotherFunction'의 끝 부분에 놓을 수 있습니다. –

+0

그런 식으로 이벤트 객체를 잃어 버리고 있습니까? (이벤트 객체가 필요합니다.) – Srle

+1

@Srle No,'addEventListener'에 제공된 함수는 첫 번째 인수로'Event'를 호출합니다. 그래서 당신의 익명 함수는'e' 매개 변수를가집니다. – Ian

답변

1

일반적으로 아니오, 완벽하게 미세한 패턴입니다.

이벤트 처리 및 응용 프로그램 논리를 분리하는 것이 좋습니다. 그래서 대신의 : (.이 사건에 적용되는 경우 확실하지, 일반적인 의견이 더 많은 고려)

document.getElementById('something').addEventListener('mousedown', function (event) { 
    var foo = event.target.getAttribute(foo); 
    doStuff(foo); 
}); 

function doStuff(foo) { 
    console.log("doing stuff with " + foo); 
    doMagic(foo); 
} 

관련 문제