2016-05-26 30 views
0

我想知道是否可以修改第三方功能(如猴子修補[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

您只需更換*總和*功能,如果你想:'obj.sum =函數(){/ *你的東西* /};' 。 – RobG

+0

@RobG是的,謝謝,它更容易但不適用於某些情況 –

回答

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;