javascript - 静态函数继承

标签 javascript node.js class static ecmascript-6

我创建了一些类 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/

相关文章:

JSON Stringify 函数返回相等,但 chai 的 equal 函数返回不相等

node.js - 解压/解压缩到 Node 中的流

java - JarScan,扫描特定类的所有子文件夹中的所有 JAR 文件

node.js - 通过 Node.js 与 ACR1252U NFC 读卡器对话

c++ - 为什么不能在 C++ 类中重新定义类型名称?

c++ - 如何在C++中制作类列表

javascript - 在 ASP.NET MVC C# 中将 if 和 else 放入 Foreach 循环中

javascript - 简单的 jQuery 函数在创建后不适用于输入元素

javascript - 无法访问 require.js 中的依赖对象字段 - 无法读取未定义的属性

javascript - 我如何用动态输入框求和总值?