2009-11-02 13 views
21

Mam funkcji nie można zmodyfikować:Dodaj do funkcji javascript

function addToMe() { doStuff(); } 

mogę dodać do tej funkcji? Oczywiście ta składnia jest bardzo źle, ale jest to ogólna idea ...

function addToMe() { addToMe() + doOtherStuff(); } 

Odpowiedz

41

Mogłeś przechowywać odniesienie do pierwotnej funkcji, a następnie zastąpić go z funkcji, która oddzwania oryginalny jednego i dodaje funkcjonalność chec:

var originalFn = addToMe; 

addToMe = function() { 
    originalFn(); // call the original function 
    // other stuff 
}; 

można to zrobić ponieważ JavaScript functionsfirst-class obiekty.

Edit: Jeśli funkcja przyjmuje argumenty, należy użyć apply przekazać je do pierwotnej funkcji:

addToMe = function() { 
    originalFn.apply(this, arguments); // preserve the arguments 
    // other stuff 
}; 

Można również wykorzystać funkcję ekspresji automatycznego wykonywania z argumentem do przechowywania odniesienie do pierwotnej funkcji, myślę, że jest trochę czystsza:

addToMe = (function (originalFn) { 
    return function() { 
    originalFn.apply(originalFn, arguments); // call the original function 
    // other stuff 
    }; 
})(addToMe); // pass the reference of the original function 
+0

tak, to prawdopodobnie najprostsze rozwiązanie! – mauris

+0

perfect :) too easy. –

+0

dziękuję :) takie eleganckie rozwiązanie. – silkcom

Powiązane problemy