Wrapping a function in Javascript / jQuery
instrumentation, javascript, jquery
Solution
Here’s a `wrap` function which will call the `before` and `after` functions with the exact same arguments and, if supplied, the same value for `this`:
var wrap = function (functionToWrap, before, after, thisObject) {
return function () {
var args = Array.prototype.slice.call(arguments),
result;
if (before) before.apply(thisObject || this, args);
result = functionToWrap.apply(thisObject || this, args);
if (after) after.apply(thisObject || this, args);
return result;
};
};
myFunc = wrap(myFunc, beforeExecute, afterExecute);
Problem
If I have an arbitrary function `myFunc`, what I'm aiming to do is replace this function with a wrapped call that runs code before and after it executes, e.g. ``` // note: psuedo-javascript var beforeExecute = function() { ... } var afterExecute = function() { ... } myFunc = wrap(myFunc, beforeExecute, afterExecute); ``` However, I don't have an implementation of the required `wrap` function. Is there anything that already exists in jQuery like this (I've had a good look through the docs but cannot see anything)? Alternatively does anybody know of a good implementation of this because I suspect that there are a bunch of edge cases that I'll miss if I try to write it myself? (BTW - the reason for this is to do some automatic instrumentation of functions because we do a lot of work on closed devices where Javascript profilers etc. are not available. If there's a better way than this then I'd appreciate answers along those lines too.)