静态函数继承

樱桃书呆子

我已经Controllers为我的路由创建了一些类Node.js,我希望它们能够在单例的基础上工作(不是必需的,它是额外的)

主控制器类

class RouteController {

    static getInstance() {
        if (!RouteController.singleton) {
            RouteController.singleton = new RouteController();
        }

        return RouteController.singleton;
    }
}

现在我想创建一个路由,例如查看帖子,我希望该类也具有单例模式,但不是 cop

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());

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章