覆盖javascript函数,同时保留原始上下文

时间:2013-06-03 05:04:23

标签: javascript closures

我只是想确认一下,在管理上下文和覆盖方法方面我没有遗漏任何内容。我在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? 似乎没有办法实现我想要做的事情,我希望如果我错了,有人可以证实这一点或纠正我。

1 个答案:

答案 0 :(得分:4)

如何保存旧功能,然后覆盖它:

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

取自Javascript: Extend a Function