如何通过NodeJS中的string“foo”访问函数“foo”?

即什么是浏览器的“窗口”对象的顶级function所附加的相当于什么?

以下代码在REPL中成功:

var assert = require('assert'); function foo() { }; assert.ok(foo == this["foo"]); 

然而,在脚本(或模块)中失败 – 在这两种情况下,“this”是一个空对象。

我想知道这个,所以我可以轻松地导出模块的命名空间中可见的所有function – 我想能够做到这样的事情:

 function foo() { }; function bar() { }; ["foo", "bar"].forEach(function (k) { exports[k] = ???; }); 

eval(k)适用于???,但是,呃。)

马特·波尔的回答非常好:

 var foo = exports.foo = function() { //... };. // Or, you could create your own object containing // the functions you'll later export: var fns = {}; fns.foo = function(){...}; // ... fns.forEach(/*...*/); // – Matt Ball Feb 27 at 14:42 

或者,

 exports.foo = { method1: function() { /*...*/ } , method2: function() { /*...*/ } , method3: function() { /*...*/ } /*...*/ } 

一些展示最佳实践的模块: https : //github.com/cloudhead/journey/blob/master/lib/journey.js对于浏览器compat: https : //github.com/caolan/async/blob/master/lib/ async.js https://github.com/mikeal/request/blob/master/main.js

/ fyi#node.js IRC欢迎你: http : //bit.ly/nodeIRC