我很想知道是否可以修改第三方功能(如猴子修补[wiki],[nice article]),以便在这些功能的中间添加几行功能
我想要的例子:
第三方(修补目标):
var obj = {
sum: function (a) {
var b = 1;
//Here I want to add a line:
// b = 2
return a + b;
}
};
注意:我知道我们可以在原始函数调用之后之前执行自定义函数和 ,但我想在中间执行自定义代码 强大的原始功能的身体。
UPD :我会在下面分享我的想法作为答案,但它很难看,所以我想找到其他方法。
答案 0 :(得分:0)
这样做有点难看。我没有很好地测试它,但它应该工作:
// Split function into array of strings
var arr = obj.sum.toString().split('\n');
// Insert our expression (b = 2) at "line 2"
arr.splice(2, 0, "b = 2");
// Remove first line: "function (a) {" (to be honest we should first parse and remember args)
arr.splice(0, 1)
//Remove last line: "}"
arr.splice(arr.length-1, 1)
// Create a string with our function
var str = arr.join("\n")
//Create function with new Function()
var newFunc = new Function("a", str); //a -is our argument for "sum" func
obj.sum = newFunc;