首页 > 解决方案 > Javascript继承单例模式和静态属性和父类

问题描述

我在问自己一个关于 javascript 中的继承和静态属性的问题。

这是我的代码:

export default class BaseService {
  static singleton = null;
  _instance;

  constructor() {
    this._instance = axios.create({
      baseURL: process.env.REACT_APP_SERVER_URL,
      headers: {
        'Accept': "application/json",
        'Content-Type': "application/json"
      }
    });
  }
}

export default class AService extends BaseService{
    
    constructor() {
        super();
    }

    static getInstance() {
        if (AService.singleton == null) { 
            AService.singleton = new AService();
        }
        return AService.singleton;
    }
}

export default class BService extends BaseService{
        
        constructor() {
            super();
        }
    
        static getInstance() {
            if (BService.singleton == null) { 
                BService.singleton = new BService();
            }
            return BService.singleton;
        }
    }

因此,在我的代码中,每次我需要相应的服务时,我都使用 getInstance() 方法而不是创建 service = new AService()。我做了一些测试,它似乎按预期工作,但我需要一些更有经验的 js 开发人员的确认。

知道 AService 和 BService 是不同的对象类型这一事实意味着当我创建 AService 的实例时,父对象中的单例仅针对所有 AService 对象而不是 BService 设置?

我的问题的第二部分是:对于 es6 类中的单例来说,这是一个很好的模式实现吗?

最后一部分是,如果是这种情况,可以将 getInstance 方法放在父类上,就像在 c# 中我会做这样 getInstance<T>() where T : BaseService的事情:意味着泛型 T 类型是 BaseService 或从 BaseService 继承。

在此先感谢,我希望我可以理解,在其他情况下请不要犹豫向我询问更多信息。

标签: javascriptecmascript-6

解决方案


推荐阅读