我有一个包(节点模块),它有一些方法,但不幸的是它们是以一种奇怪的方式构造的。 所有方法都引用一个仅存在于包内的变量(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。
答案 0 :(得分:1)
如果theVar
在整个地方(可以说是参考)得到return
,那么是的,您可以覆盖任何方法 / 它包含的属性(如果那些属性未通过Object.freeze()
或其他方法 imuteable )。
如果那个对象没有在某个地方 public ,通过传递它的引用,那么不,ECMAscript中没有办法闯入 unknown < / em>上下文。换句话说,您无法从任何地方访问已关闭的变量,而是子上下文。