我创建了一些类 Controllers
我的路线 Node.js
我希望它们能够在单例基础上工作(不是必需的,这是额外的)
主 Controller 类
class RouteController {
static getInstance() {
if (!RouteController.singleton) {
RouteController.singleton = new RouteController();
}
return RouteController.singleton;
}
}
现在我想创建一条路线,例如查看帖子,并且我希望该类也具有单例模式,但不具有警察
PostController类
class PostController extends RouteController {
}
如果我这样做并检查它 console.log(RouteController.getInstance() === PostController.getInstance())
它返回true
当我希望每个(子)类都有自己的单例实例时。
我怎样才能正确地做到这一点?
最佳答案
一种简单的方法是查看您的 singleton
属性是否是 this
的实例。即使您在任何派生类上执行此操作之前调用 RouteController.getInstance()
,这也将起作用。
class RouteController {
log() {
return 'Route';
}
static getInstance() {
if (!(this.singleton instanceof this)) {
// Only called twice so you can verify it's only initialized
// once for each class
console.log('Creating singleton...');
this.singleton = new this();
}
return this.singleton;
}
}
class PostController extends RouteController {
log() {
return 'Post';
}
}
console.log(RouteController.getInstance().log());
console.log(PostController.getInstance().log());
console.log(RouteController.getInstance().log());
console.log(PostController.getInstance().log());
关于javascript - 静态函数继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43551779/