在node.js中,我们通常使用“require”来包含其他文件的模块,无论是来自我们自己还是第三方。但是,对于我来说,返回“item”和一个真实对象之间的区别是不明确的。
在我看来,返回“项目”尚未启动,因此它不是一个对象。但是,有时我们可以直接使用它下面的方法。
我应该如何实现这种差异?
答案 0 :(得分:1)
当您需要文件/模块时,执行所需文件中的代码,并将其导出对象返回给您。例如,在以下代码中:
// util.js
var plusOne = function(x) { return x + 1; }
exports.plusOne = plusOne;
// app.js
var util = require('./util.js');
var z = util.plusOne(1);
console.log(z); // will output 2
执行app.js
时,app.js
将需要util.js
。当达到require('./util.js')
行时,它会执行util.js中的代码并返回给它导出对象。在这种情况下,exports对象包含函数的定义(plusOne),但它可能包含更复杂的对象。
这就是为什么你得到一个已初始化的对象。
要记住的一点是,require中的代码只会在您第一次需要文件时执行。之后,已经初始化的对象将返回给您。例如,如果你要在另一个文件中要求('./ util.js'),Node足够聪明地意识到它已经执行了这个文件并返回它生成的对象(在这种情况下是一个对象)它内部的一个函数),而不必重新执行代码。