2016-03-01 83 views
0

我想修改外部庫的原型函數,以便在調用函數之前執行某些代碼。我雖然克隆該功能,然後通過一個新的像這樣替換它:Javascript - 克隆原型函數

請注意,我用another question

發現克隆功能這是一個簡單的例子:

var oldFunction = anObject.aFunction.clone(); 
anObject.aFunction = function(a, b, c) { 
    if (a > b) { 
     return; 
    } else { 
     oldFunction(a, b, c); 
    } 
} 

Function.prototype.clone = function() { 
    var that = this; 
    var temp = function temporary() { return that.apply(this, arguments); }; 
    for(var key in this) { 
     if (this.hasOwnProperty(key)) { 
      temp[key] = this[key]; 
     } 
    } 
    return temp; 
}; 

但是,這樣做,oldFunction似乎失去了其原始參考this

有沒有解決方案?

回答

1

我不認爲你需要克隆的功能,只保留一個參考吧。或者更準確地說,使用正確的this綁定創建函數的副本。

var oldFunction = anObject.aFunction.bind(anObject); 
anObject.aFunction = function(a, b, c) { ... }; 

bind創建具有this由第一參數指定的給定功能的副本。它也可以用來綁定參數。

1

你需要用正確的這個稱呼它:

oldFunction.call(this, a, b, c);