即。什么是浏览器的“窗口”对象,它附加了顶级函数?
以下代码在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)
适用于???,但是,呃。)
答案 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