2012-12-03 24 views
0

我有一个问题,我使用一个文件来保存模块列表并要求在我的nodejs服务器中的一次调用中使用此列表。我想以特定的方式使用列表中的模块。如何使用JavaScript函数返回节点模块中的对象

modules.js -

Mods = { 
    mymodule: require('./mymodule.js') 
} 

exports.f = function() { 
    return Mods; 
} 

index.js -

f = require('./modules.js').f; 

f().mymodule.echo("Hello World"); 

所以不是如何我使用F()现在我想将模块我是名直接调用到函数,所以我可以做这样的事情:

f = require('./modules.js').f; 

f('mymodule').echo("Hello World"); 

我已经尝试了一些不同的实验,但不能得到它的工作,是有可能在JavaScript中做到这一点?

+3

零队长,我建议你上你的名字的工作,结束了。 – jAndy

回答

1

好吧,如果你这样做:

var Mods = { 
    mymodule: require('./mymodule.js'); 
} 

module.exports = function(name) { 
    return Mods[name]; 
}; 

那么你可以这样做:

var f = require("./modules.js"); //no .f required 

f("mymodule").echo("Hello world"); 
+0

感谢这很好用 – ubiQ

1

编辑:有人问我解释我的回答,我很高兴这样做。该解决方案的关键是所谓的括号表示。这个术语是指使用变量访问JavaScript中的对象的属性的能力。在下面的代码中,您可以看到如何使用[name]访问对象Mods的属性,其中name是一个包含属性名称作为字符串的变量。

Mods = { 
    mymodule: require('./mymodule.js'); 
} 

exports.f = function(name) { 
    return Mods[name]; 
} 
+0

请考虑添加评论到您的代码只有答案。 – cem

1

我会说更多... ^^

var Mods = { 
    mymodule: require('./mymodule.js'); 
} 

module.exports = function(name) { 
    if(!name) return Mods; 
    return Mods[name]; 
}; 
+0

好的除了谢谢 – ubiQ

相关问题