var f = function() {
// Do something useful here
};
이 함수를 '관찰'하고 실행될 때 알림을받을 수있는 방법이 있습니까? 뭔가 비슷한 바인딩 jQuery에서,하지만 bind 함수 및 DOM 이벤트가 아닌?함수가 실행될 때 jQuery/Javascript가 알림을받습니다.
f.bind(function() {
alert('F was executed.');
});
var f = function() {
// Do something useful here
};
이 함수를 '관찰'하고 실행될 때 알림을받을 수있는 방법이 있습니까? 뭔가 비슷한 바인딩 jQuery에서,하지만 bind 함수 및 DOM 이벤트가 아닌?함수가 실행될 때 jQuery/Javascript가 알림을받습니다.
f.bind(function() {
alert('F was executed.');
});
당신은 notifyObserver 호출하는 함수와 f를 대체 할 수있는 :
var f = function() {
// Do something useful here
notifyObserver();
};
하지만 내가 이런 뭔가를 원하는 :
이 같은 뭔가를하지 않으려는
을f = (function(oldF){
return function(){
notifyObserver();
oldF();
};
})(f);
그런 식으로 (이전) f 자체를 수정할 필요가 없습니다. 물론 여기에는 bind
기능이 포함되어 있지 않습니다. 당신이 이벤트 핸들러
manager.bind('f', function(){...});
그리고 래퍼 함수가 더 같은 f = (function(oldF){
return function(){
manager.notify('f');
oldF();
};
})(f);
당신은 래퍼의 생성을 일반화 할 수 있습니다 보일 것이다 작성을 등록 할 수있는 아마 이것에 대한 관리자 클래스의 어떤 종류를 만들 것입니다 :
function wrap(methodToWrap, eventName){
return function(){
manager.notify(eventName);
return methodToWrap.apply(this, arguments);
}
}
(이 인수와 반환 값의 수와 함께 작동!)
그리고 다음과 같은 일을 할 :
f = wrap(f, "f");
참조 : http://jsfiddle.net/NBefc/2/ (업데이트, 아니 반환 값)
흥미로운 솔루션 :) 어떻게 이런 식으로 사용할 수 있습니까? – gideon
멋진 솔루션, Andre. 나는 f가 어떤 인수도 취하지 않는다고 가정한다고 덧붙이겠다. 그러나 [이것의 간단한 데모] (http://jsfiddle.net/NBefc/)를 위해, 나는 이런 종류의 기능으로'alert '를 대체하는 프로그램을 함께 던졌다. 또한 하나의 인수가 필요하지만 어떻게 동적으로 여러 가지를 처리할지 모르겠습니다. 데모는 console.count를 일반적인 경고 기능에 추가하기 만하면됩니다. –
@JosephMarikle : 인수와 반환 값을 사용하는 데모로 예제를 업데이트했습니다. http://jsfiddle.net/NBefc/2/ –
은 그래서 당신이 정말로 원하는 것은 콜백 함수입니다. – qsheets