2012-12-03 45 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

相關問題