好吧,我有点难过。
如果您打开一个 Node 窗口并输入 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 实现这一点
最佳答案
首先,似乎有些困惑。 Node 的 require
是 not RequireJS .它们是两个完全不同的东西。
要了解有关 Node 模块系统的更多信息,here are the relevant docs .这里是docs on require .
要回答你的第二个问题,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 }
关于javascript - node.js 全局中定义的 require 对象如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9638343/