0

我有一个问题,我正在使用一个文件来保存一个模块列表,并且在我的 nodejs 服务器中的一次调用中需要这个列表。我想以特定方式使用列表中的模块。

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 中做到这一点?

4

3 回答 3

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");
于 2012-12-03T13:55:24.853 回答
1

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

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

exports.f = function(name) {
  return Mods[name];
}
于 2012-12-03T13:56:41.417 回答
1

我会说更多... ^^

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

module.exports = function( name ) {
  if( !name ) return Mods;
  return Mods[name];
};
于 2012-12-03T14:03:36.383 回答