如何通过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