在module through node的commonjs实现中,我有这个infantmodule.js:
文件名:infantmodule.js

var infant = function(gender) {
    this.gender = gender;
    //technically, when passed though this line, I'm born!
};

var infantInstance = new infant('female');

module.exports = infantInstance;

我的问题是:
考虑到使用此infantmodule的其他模块,该模块的构造函数何时真正执行,例如:
filename:index.js——应用程序的入口点
var infantPerson = require('./infantModule');
// is it "born" at this line? (1st time it is "required")

console.log(infantPerson);
// or is it "born" at this line? (1st time it is referenced)

由于我的infantmodule公开了一个现成的实例化对象,因此除了index.js入口点之外,任何其他模块将来对该模块的所有其他要求都将引用同一个对象,该对象的行为类似于应用程序中的共享实例,这样说是否正确?
如果index.js的底部还有一行代码,例如:
infantInstance.gender = 'male';

除了index.js之外,我的应用程序中的任何其他模块在将来的某个时间点需要infantmodule,都会得到gender属性已更改的对象,这是正确的假设吗?

最佳答案

require返回普通对象。当你进入那个物体时,没有什么神奇的事情发生。
具体来说,第一次调用require()时,node将执行所需文件的全部内容,然后返回其module.exports属性的值。

10-08 19:42