Если работа, выполняемая функцией, является синхронной, ее действительно легко обернуть (см. Ниже). Если он выполняет свою работу в асинхронном режиме , вы можете или, возможно, все еще не сможете обернуть его, детали будут различаться в зависимости от реализации функции.
Завершение функции, которая работает синхронно:
var original = JsFunction;
JsFunction = function JsFunction() {
// Do stuff before
// ...
// Call it
var result = original.apply(this, arguments);
// Do stuff after
// ...
return result; // Or something else if you prefer
};
Мясо этого
var result = original.apply(this, arguments);
... который использует Function#apply
для вызова исходной функции с тем же this
, с которым была вызвана ваша замена, и всеми аргументами, с которыми она была вызвана (arguments
является специальным псевдо- массив в JavaScript, содержащий аргументы, используемые при вызове традиционной функции или метода).
С функциями ES2015 + вы можете заменить использование arguments
параметром rest:
var original = JsFunction;
JsFunction = function JsFunction(...args) {
// Do stuff before
// ...
// Call it
var result = original.apply(this, args);
// Do stuff after
// ...
return result; // Or something else if you prefer
};