2016-12-15 6 views

Antwort

0

Wenn Sie vermeiden können nicht aufgerufen werden, befestigen dies zu tun (das ist in der Regel am besten), die übliche Art und Weise, es zu tun ist, um Wrap die Funktion in einer anderen Funktion:

function f(msg) { 
 
    console.log("The message is: " + msg); 
 
} 
 

 
f("Before being wrapped"); 
 

 
console.log("Now wrapping the function"); 
 

 
// Then wrapping it 
 
var originalF = f; 
 
f = function() { 
 
    var returnValue; 
 
    console.log("This is before the original function"); 
 
    returnValue = originalF.apply(this, arguments); 
 
    console.log("This is after the original function"); 
 
    return returnValue; 
 
}; 
 

 
f("After being wrapped");

Beachten Sie die Verwendung von Function#apply, um sicherzustellen, dass wir die ursprüngliche Funktion mit demselben this Wert aufrufen, mit dem wir aufgerufen wurden, und mit allen ursprünglichen Argumenten. Dann behalten wir den Rückgabewert und geben ihn zurück, wenn wir fertig sind.

Natürlich, wenn die ursprüngliche Funktion eine asynchrone Aufgabe gestartet hat, haben wir nur die ursprüngliche Funktion, nicht den Code ausgelöst, wenn die Aufgabe abgeschlossen ist.

0

Sie müssen die Funktion neu definieren. Sie können dies mit einem IIFE tun.

funcname = (function(oldfunc, callback) { 
    return function() { 
     var value = oldfunc.apply(this, arguments); 
     callback(); 
     return value; 
    })(funcname, callback); 
); 
Verwandte Themen