Понятие «синглтон-класс» происходит от языков, которые просто имеют классы (например, Java), однако JavaScript имеет гораздо больше, чем классы (объекты, функции, «глобальный код»), и поэтому нам не нужно подражать созданию единственного объекта с поддельным классом, мы можем просто сделать:
const singleton = { some: 0, properties: 0 };
// initialization goes here
Вы правы в том, что можно создать "синглтон-класс", но это не дает никаких преимуществ, оно просто добавляет шаблон и, на мой взгляд, затрудняет выполнение кода (как я и ожидал new Class
) создать экземпляр, а не возвращать синглтон).
Чтобы проверить, приходит ли экземпляр из класса, который написан на вашем «шаблонном образе», вы можете просто проверить экземпляр:
instance === instance.constructor.instance
Но я не уверен, что это вообще полезно. Это сомнительно, если вам действительно нужны эти классы, и если они вам действительно нужны, то у вас, вероятно, есть только несколько из них, и было бы гораздо меньше ошибок при проверке, является ли экземпляр instanceof
одним из них:
instance instanceof Singleton1 || instance instanceof Singleton2
Если ваши "синглтон-классы" не написаны вами, и вы знаете только, что они получены из функции конструктора, которая может возвращать существующие экземпляры, тогда единственный способ - создать новый экземпляр этого класса и проверить был ли возвращен тот же экземпляр:
instance === new instance.constructor
Если конструктор, тем не менее, требует аргументов, то он сломается, или если это просто обычный экземпляр класса, вы создадите ненужный экземпляр, который может вызвать нежелательные побочные эффекты.
Так ведь: зачем тебе это?