在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
属性的值。