javascript - 如何知道类的实例是否来自单例?

标签 javascript design-patterns ecmascript-6 singleton es6-class

我必须评估一个类的实例是否来自单例

我知道在 JavaScript 中要创建一个单例,我需要在构造函数中保存一个保存 this 的变量 instance(名称可以是任何名称)。

class Singleton {
  constructor() {
    const instance = this.constructor.instance;
    if (instance) return instance;
    this.constructor.instance = this;
  }
}

但是如果我没有那个代码,我只是取回类的实例,例如:

let singletonOrMaybeNo = new Singleton()

我只有singletonOrMaybeNo

我如何知道该实例是单例还是否?

谢谢!!

最佳答案

您可以检查具有相同构造函数的实例的相同标识。

class Singleton {
  constructor() {
    const instance = this.constructor.instance;
    if (instance) return instance;
    this.constructor.instance = this;
  }
}

class NoSingleton {
  constructor() {
  }
}


let singletonOrMaybeNo = new Singleton,
    other = new NoSingleton;

// works only with known constructor
console.log(singletonOrMaybeNo === new Singleton);

// takes the constructor from the instance (kudos to Jonas Wilms)
console.log(singletonOrMaybeNo === new singletonOrMaybeNo.constructor);

console.log(other === new other.constructor);

关于javascript - 如何知道类的实例是否来自单例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56989470/

相关文章:

JavaScript 链式连接函数?

javascript - Facebook Messenger 机器人上的快速回复没有有效负载

javascript - 使用 JavaScript 通过多行获取最近的匹配项

nhibernate - NHibernate 中的映射装饰器模式

java - 在工厂中使用反射

javascript - 基于 ES6 的多个(React)Node.JS 模块导入有问题

javascript - 动态 PDF 与 HTML 转 PDF

java - 在下面的示例中使用抽象工厂而不是工厂方法有什么真正的好处?

javascript - const 在 Edge 15 开发者工具中不起作用

javascript - 无法从导入的模块中找到函数