필자는 기본적으로 동일한 방식으로 새로운 방법으로 래핑해야하는 몇 가지 방법을 가지고 있습니다. 내 첫 번째 솔루션이 작동하지 않으며 이유를 이해하지만이 문제에 대한 간단한 해결책이 있는지 또는 내가 원하는 방식으로 수행 할 수 없는지 여부를 알지 못합니다.새 메서드에서 메서드를 프로그래밍 방식으로 바꾸기 (포장) 할 수 있습니까?
다음은 예입니다. onClick 메서드가있는 객체가 있습니다. onClick 메서드보다 먼저 코드를 실행해야합니다. 나는 다음과 같은 시도 :
// objects a-c
a = {onClick : function() { console.log('a'); }};
b = {onClick : function() { console.log('b'); }};
c = {onClick : function() { console.log('c'); }};
// first try
var arr = [a, b, c]
for (var i = 0; i < arr.length; i++) {
var oldOnClick = arr[i].onClick;
arr[i].onClick = function() {
// new code here
oldOnClick();
}
}
// outputs 'c'
// what i want is to maintain a reference to the original method
// so in this case, execute my new code and output 'a'
a.onClick();
새로운 메서드를 호출 할 때이 할당 될 때, oldOnClick이 방법 마지막 반복이 아니라에서 방법을 가리 때문이 작동하지 않습니다.
제가 간과 할 수있는 간단한 해결책이 있습니까?
for(var i=0, l=arr.length; i<l; i++){
(function(i){
var oldOnclick = arr[i].onClick;
//etc.
})(i);
}
ahh .. 예 b/c 즉시 실행됩니다. thx, 나는 간단한 해결책이 있다고 생각했다. :) –
폐쇄 사용 +1 – dfa