我只想确认我在管理上下文和覆盖方法方面没有遗漏任何东西。我在node.js应用程序中使用http-proxy模块,并且需要重写HttpProxy.prototype.proxyRequest函数。我想在不直接修改原始模块代码的情况下执行此操作,但是还没有找到一种方法来执行此操作。
如果我这样做:
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?
似乎没有一种方法可以实现我想要做的事情,我希望有人可以确认这一点,或者在我错了的情况下纠正我。
最佳答案
保存旧函数然后将其覆盖,如:
var old = httpProxy.HttpProxy.prototype.proxyRequest;
httpProxy.HttpProxy.prototype.proxyRequest = function () {
old.apply(this, arguments);
//do more stuff
}
取自Javascript: Extend a Function