如何在特定行修改(猴子修补)第三方功能

时间:2016-05-26 06:08:42

标签: javascript monkeypatching

我很想知道是否可以修改第三方功能(如猴子修补[wiki],[nice article]),以便在这些功能的中间添加几行功能

我想要的例子:

第三方(修补目标):

var obj = {
  sum: function (a) {
    var b = 1;
    //Here I want to add a line:
    // b = 2
    return a + b;
  }
};

注意:我知道我们可以在原始函数调用之后之前执行自定义函数 ,但我想在中间执行自定义代码

UPD :我会在下面分享我的想法作为答案,但它很难看,所以我想找到其他方法。

1 个答案:

答案 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;