如何通过NodeJS中的字符串“foo”访问函数“foo”?

时间:2011-02-26 23:33:32

标签: module node.js window export

即。什么是浏览器的“窗口”对象,它附加了顶级函数?

以下代码在REPL中成功:

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

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

我很想知道这一点,所以我可以轻松导出模块名称空间中可见的所有函数 - 我希望能够做到这样的事情:

function foo() { };
function bar() { };

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

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

1 个答案:

答案 0 :(得分:1)

Matt Ball的回答非常好:

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