通过 node js 使用 CommonJS 模块化时,什么时候执行 Javascript 构造函数?

When is a Javascript constructor function executed when using CommonJS modularity through node js?

在通过 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,比如:

文件名: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 时,都会更改性别 属性 的对象,这是正确的假设吗?

require return是一个普通对象。当您访问该对象时,没有什么神奇的事情发生。

具体来说,第一次调用require()时,Node会执行所需文件的全部内容,然后return其module.exports[=18=的值].