2013-06-03 41 views
1

我只是想確認,我不會錯過管理上下文和覆蓋方法的事情。我在node.js應用程序中使用http代理模塊,我需要重寫HttpProxy.prototype.proxyRequest函數。我想直接修改原始模塊代碼,但一直沒有找到辦法做到這一點。覆蓋JavaScript函數,同時保留原始上下文

如果我這樣做:

var httpProxy = require('http-proxy'), 
httpProxyOverride = require('./http-proxy-override.js'); 

httpProxy.HttpProxy.prototype.proxyRequest = httpProxyOverride.proxyRequestOverride; 

然後我失去了原有的內容和錯誤拋出。如果我使用apply(),我可以提供一個新的上下文,但它不會出現,我可以保留原始上下文。

基於關閉此SO線程: Is it possible to call function.apply without changing the context? 它不會出現有一種方法可以實現我想要做的,我希望如果我有人可以證實這一點或指正錯誤。

回答

4

有關保存舊的功能,然後重寫它像什麼:

var old = httpProxy.HttpProxy.prototype.proxyRequest; 
httpProxy.HttpProxy.prototype.proxyRequest = function() { 
    old.apply(this, arguments); 
    //do more stuff 
} 

Javascript: Extend a Function

+0

事實證明,我原來的做法是不正確的服用。 http-proxy提供了一個事件('proxyResponse'),它提供了改變必要行爲與直接覆蓋代碼的訪問權限。然而,這是你的迴應,導致我在這個發現的絆腳石,所以我會給你信貸。謝謝。 – opike