Почему такой паттерн не корректен? var obj = {};

var Singleton = function(){
if(!obj) {
var obj = {};
}

return obj;

}

var o = new Singleton();
var o1 = new Singleton();
o.prop = 's';
console.log(o === o1); //false
console.log(o1.prop); //undefined

21 Авг 2019 в 07:03
241 +1
1
Ответы
1

Этот паттерн не работает как синглтон, потому что он создает новый объект obj при каждом вызове конструктора Singleton. В результате у вас создаются два разных объекта obj для o и o1, поэтому o === o1 возвращает false.

Чтобы исправить это, вам нужно удалить объявление var obj = {}; внутри конструктора Singleton, чтобы не создавать новый объект при каждом вызове. Вместо этого вы можете просто возвращать уже существующий объект obj, если он уже был создан.

Вот исправленный пример:

var obj = {};
var Singleton = function() {
return obj;
}
var o = new Singleton();
var o1 = new Singleton();
o.prop = 's';
console.log(o === o1); // true
console.log(o1.prop); // 's'

Теперь o и o1 ссылаются на один и тот же объект obj, и поэтому o === o1 возвращает true, и o1.prop возвращает 's'.

20 Апр 2024 в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир