함수 foo()가 발생할 때마다 함수 bar()를 트리거해야합니다. 함수 foo에 대한 제어권이 없거나 향후 변경 될지 여부는 없습니다. 나는 정기적으로이 상황을 겪는다 (나는 그것을 싫어한다). 기존 함수의 끝에 코드 추가
나는 함수 foo의 끝에 내 코드를 추가하려면이 기능을 썼다function appendToFunction(fn,code){
if(typeof fn == 'function'){
var fnCode = fn.toString() ;
fnCode = fnCode.replace(/\}$/,code+"\n}") ;
window.eval(fnCode); // Global scope
return true ;
}
else{
return false ;
}
}
예 :
appendToFunction(foo,"bar();");
이 끔찍한 아이디어로 저를 친다 -하지만 그것은 작동합니다. 누군가 더 나은 (더 안전한) 방향으로 나를 가리켜 주시겠습니까.
편집 : foo
은 특정 기능이 아니지만 많은 기능을 다루고 있습니다. 페이지에서 동적으로 변경되지는 않습니다. 그러나 수시로 변경 될 수 있습니다 (예 : 양식 유효성 확인 요구).
솔루션 : 나는 아담의 대답의 수정 된 버전에 정착했다. 완벽하지는 않지만 내가 갖고있는 것보다 낫습니다.
var oldFoo = foo ;
foo = function(){
var result = oldFoo.apply(this, arguments);
bar();
return result ;
}
NB. .apply()
메서드가없는 IE6/7의 일부 원시 함수를 조심하십시오. 이뿐만 아니라 저를 염려
중복 가능성 (http://stackoverflow.com/questions/9134686/adding-code-to- :
일반적인 예는 다음 일 수 a-javascript-function-programatically) –