如果我有一个任意函数myFunc,我打算做的是用执行代码之前和之后的代码来替换这个函数,例如
// note: psuedo-javascript var beforeExecute = function() { ... } var afterExecute = function() { ... } myFunc = wrap(myFunc,beforeExecute,afterExecute);
但是,我没有实现所需的wrap函数.有没有什么已经存在于jQuery这样(我已经看了很多文档但看不到任何东西)?或者,任何人都知道这是一个很好的实现,因为我怀疑有一堆边缘的情况,我会想念,如果我试图自己写?
(BTW – 这样做的原因是做一些功能的自动化测试,因为我们在没有Javascript分析器等的封闭设备上做了大量的工作,如果有一个比这更好的方法,我会很欣赏这些线路的答案太.)
解决方法
这是一个包装函数,它将使用完全相同的参数来调用前后函数,如果提供,则返回相同的值:
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,afterExecute);