javascript - node.js 全局中定义的 require 对象如何工作?

标签 javascript design-patterns node.js requirejs

好吧,我有点难过。

如果您打开一个 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 的 requirenot 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/

相关文章:

java - 用于分发传感器数据的高效 Java 观察器设计 (~40Hz)

javascript - 如何在 Node.js 的 console.log() 中创建换行符

javascript - 从图表外部单击 highcharts 图表上的一个点

javascript - 在 JavaScript 中实现节点存储功能

algorithm - 关于数据并行编程和算法的好书和资源

node.js - Electron 从自定义扩展文件中获取数据

node.js - SuperAgent + Node.js 连接被拒绝

javascript - SignalR 无法调用客户端监听函数

javascript - nodeJS、mongoDB、express、eJS - 关于内存缓存的意见

ios - 确定必要变量类型的设计模式