1

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

例如:

var theVar = {};

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

好吧,我想在我的新库中覆盖其中的一些方法,但由于 theVar 而不能这样做。它的值当然指向旧的东西,但我需要让它指向一个新的对象。

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

提前致谢


编辑

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

theVar 实际上是这样定义的:

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

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

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

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

4

1 回答 1

1

如果作为一个整体theVarreturn'ed (它的引用,可以这么说),那么是的,你可以覆盖它包含的任何方法/属性(如果这些属性没有被其他方法设置为不可变)Object.freeze()

如果该对象没有通过传递它的引用在某处公开,那么不,ECMAscript 没有办法进入未知上下文。换句话说,您不能从任何地方访问封闭变量,只能从子上下文访问。

于 2013-05-17T20:21:02.020 回答