Как получить доступ к функции "foo" через строку "foo" в NodeJS? - PullRequest
1 голос
/ 27 февраля 2011

то есть что эквивалентно объекту "окна" браузера, к которому прикреплены функции верхнего уровня?

Следующий код завершается успешно в 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 Ответ

1 голос
/ 30 марта 2011

Ответ Мэтта Болла довольно хороший:

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 Для браузера: 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...