很难解释,所以我将重现代码.
我有两个班级文件.
Business.js
const Street = require("./Street");
module.exports = class Business {};
Street.js
const Business = require("./Business");
module.exports = class Street {
constructor() {
console.log(Business);
}
};
和index.js文件
const Street = require("./Street");
const street = new Street();
当我运行index.js(节点./index.js)时,它会按预期记录[Function:Business],
但是,当我在如下所示的index.js文件中需要Business.js时,记录消息更改,它将记录空对象{}.
index.js
const Business = require("./Business");
const Street = require("./Street");
const street = new Street();
我不明白为什么要求Street.js文件中的index.js效果日志消息中有Business.
尝试使用codesandBox.
最佳答案
似乎存在循环依赖关系.理想情况下,模块不应依赖于依赖于该模块的模块.
由于您的Business.js模块依赖于Street.js模块,而Street.js模块依赖于Business.js模块(称为循环依赖),您将获得这种“怪异的行为”.
避免循环依赖的任何重组都可以,例如将两个类都移到同一个文件(只是一个建议,您可能希望使用其他方式作为用例和编码实践).
class Street {
constructor() {
console.log(Business);
}
}
class Business {}
module.exports = {
Street,Business
};
尝试使用codesandBox.