覆盖使用局部变量(NodeJS)的节点模块方法

时间:2013-05-17 20:14:17

标签: javascript node.js

我有一个包(节点模块),它有一些方法,但不幸的是它们是以一种奇怪的方式构造的。 所有方法都引用一个仅存在于包内的变量(local var)。

例如:

var theVar = {};

module.exports.foo = function() {
theVar.someMethod();
}

好吧,我想在我的新lib中覆盖其中的一些方法,但是因为theVar而无法做到这一点。它的价值当然指向旧的东西,但我需要指向一个新的对象。

有人能告诉我如何覆盖这些方法吗?这在JS中是否可能?

提前致谢


修改

所以只是为了确保我理解正确:

theVar实际上定义如下:

var theVar = module.exports.theVar = {....}

但是,该模块的所有方法都使用它:

exports.func = function() {
   theVar.method()  // and not exports.theVar.method()
}

所以这意味着,theVar无法改变,对吧?我只能改变exports.theVar。

1 个答案:

答案 0 :(得分:1)

如果theVar在整个地方(可以说是参考)得到return,那么是的,您可以覆盖任何方法 / 它包含的属性(如果那些属性未通过Object.freeze()或其他方法 imuteable )。

如果那个对象没有在某个地方 public ,通过传递它的引用,那么不,ECMAscript中没有办法闯入 unknown < / em>上下文。换句话说,您无法从任何地方访问已关闭的变量,而是子上下文