在Javascript/jQuery中包装函数

Gre*_*ech 10 javascript jquery instrumentation

如果我有一个任意函数myFunc,那么我的目标是用一个在执行代码之前和之后运行代码的包装调用替换这个函数,例如

// note: psuedo-javascript

var beforeExecute = function() { ... }
var afterExecute = function() { ... }

myFunc = wrap(myFunc, beforeExecute, afterExecute);
Run Code Online (Sandbox Code Playgroud)

但是,我没有所需wrap功能的实现.这样的jQuery中是否存在任何东西(我通过文档很好看但却看不到任何东西)?或者有人知道这个的一个很好的实现,因为我怀疑有一堆边缘情况,如果我自己尝试写,我会想念?

(顺便说一句 - 这样做的原因是要做一些功能的自动检测,因为我们在Javascript剖析器等不可用的封闭设备上做了很多工作.如果有比这更好的方法那么我会很感激这些方面的答案太.)

Mar*_*ijn 11

这里是一个wrap函数,将调用beforeafter函数使用完全相同的参数,如果提供的相同的值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);
Run Code Online (Sandbox Code Playgroud)