1

我只是想确认在管理上下文和覆盖方法方面我没有遗漏任何东西。我在 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 线程: 是否可以在不更改上下文的情况下调用 function.apply? 似乎没有办法实现我想要做的事情,我希望有人能证实这一点,或者如果我错了,可以纠正我。

4

1 回答 1

4

保存旧函数然后覆盖它怎么样:

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

取自Javascript:扩展函数

于 2013-06-03T05:24:07.460 回答