Как работает объект require, определенный в глобальном файле node.js? - PullRequest
3 голосов
/ 09 марта 2012

хорошо, я немного озадачен.

Если вы откроете окно узла и наберете this.require, вы получите:

[Function: require]
resolve: [Function],
main: undefined,
extensions:
{ '.js': [Function],
  '.json': [Function],
  '.node': [Function] },
registerExtension: [Function],
cache: {} }

Это означает, что функция require(args) была создана, скажем, require=function(){return resultOfOperation}

ТОГДА кто-то пошел дальше и сказал: require.cache={} Я в порядке со всем этим, но является ли объект кэша каким-либо образом полезным для функции require(args)? В источниках requirejs вообще не упоминается объект кеша, поэтому мне интересно, запускаю ли я другой загрузчик модулей или это просто то, что nodejs использует для отслеживания какого-либо другого поведения.

Вопрос в том, «Может ли / (как может) функция, которой были назначены дополнительные свойства, получить доступ к этим свойствам из исполняемого тела кода?» (желательно без знания превосходящей функции)

Обратите внимание, я понимаю, что это, возможно, просто записано в движок в c ++, мне просто интересно посмотреть, могут ли люди придумать способ сделать это в JavaScript

Ответы [ 2 ]

4 голосов
/ 09 марта 2012

Во-первых, кажется, что есть некоторая путаница. Узел require равен , а не RequireJS . Это две совершенно разные вещи.

Чтобы узнать больше о модульной системе узла, вот соответствующие документы . Вот документов по требованию .

Чтобы ответить на ваш второй вопрос, функции в javascript являются объектами. Один из способов сделать что-то похожее на то, что вы описали выше:

var foo = function() {
    console.log(foo.cache);
};

foo.cache = {
    bar: 1
};

foo();
// Outputs { bar: 1 }

Другой способ использует устарелый arguments.callee (так что не делайте этого дома):

var foo = function() {
    console.log(arguments.callee.cache);
};

foo.cache = {
    bar: 1
};

foo();
// Outputs { bar: 1 }
4 голосов
/ 09 марта 2012

Ваш последний вопрос:

Может / (как может) функция, которой были назначены дополнительные свойства, получить доступ к этим свойствам из исполняемого тела кода?

Вы можете использовать глобальное имя функции.Например,

var myFunc = function() {
    console.log(myFunc.a++);
}
myFunc.a = 1;
myFunc();
myFunc();

выведет

1
2

Теперь другой ваш вопрос

Я в порядке со всем этим, но это объект кешалюбое использование функции require (args)?

Да, require.cache используется, поэтому, когда вы дважды загружаете один и тот же модуль, он возвращает один и тот же объект и на самом деле не загружает скрипт снова.Ознакомьтесь с документацией по node.js по require.cache: http://nodejs.org/api/globals.html#globals_require_cache

...