我有两个类,以单实例模式导出
// classA.js
let ClassB = require('./classB')
let ClassA = class ClassA {
constructor () {
this.name = 'ClassA'
}
getName () {
return this.name
}
getOtherName () {
return ClassB.getName()
}
}
module.exports = (function() {
return new ClassA()
})()
// classB.js
let ClassA = require('./classA')
let ClassB = class ClassB {
constructor () {
this.name = 'ClassB'
}
getName () {
return this.name
}
getOtherName () {
return ClassA.getName()
}
}
module.exports = (function() {
return new ClassB()
})()
在这两种情况下,运行getOtherName()
都会抛出错误,因为另一个类对象是一个空对象。
我已经阅读了this帖子,其中有一些信息可以通过ES6前类定义(原型样式)来解决这个问题,但这些解决方案似乎都不适用。
例如,在定义方法之前无法导出类。我可以想办法解决这个问题,因为班级不是单身人士,但每个班级需要一个实例,这让我觉得更难。
对此最佳解决方案是什么?
答案 0 :(得分:0)
在您真正需要之前,请不要加载ClassA
。变化
let ClassA = require('./classA')
// ...
getOtherName () {
return ClassA.getName()
}
到
getOtherName () {
return require('./classA').getName()
}
另外
module.exports = (function() {
return new ClassA()
})()
毫无意义。只是做
module.exports = new ClassA();
或者,由于这些是单例类,所以根本不要使用单例类,并使您的函数成为模块的一部分。
// classB.js
let ClassA = require('./classA');
const name = 'ClassB';
exports.getName = function () {
return name;
};
exports.getOtherName = function() {
return ClassA.getName();
};
因为当module.exports
已经是对象时,没有理由拥有单独的实例对象。