我只想确认我在管理上下文和覆盖方法方面没有遗漏任何东西。我在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

09-25 21:12