juharop
@juharop

Паттерн Singleton. Как в конструкторе создать замыкание?

Вопрос внутри кода

function Sun() {
    
    if (typeof Sun.instance === 'object') return Sun.instance;

    this.color = 'yellow';
    this.isBig = true;

    Sun.instance = this;
}

var sun1 = new Sun;

Sun.instance = null; // эта строчка все ломает. Как запретить доступ к изменению свойства?

var sun2 = new Sun;

sun1 === sun2 // false. объекты должны быть равны
  • Вопрос задан
  • 329 просмотров
Решения вопроса 1
evgeniy8705
@evgeniy8705
Повелитель вселенной
const sun = new class { // singleton...
  constructor(color, isBig) {
    this.color = "yellow";
    this.isBig = true;
  }
}();

function createSunSingleton() {
  var instance; // замыкание...
    
  return function() {
    if (typeof instance === "object") return instance;

    this.color = 'yellow';
    this.isBig = true;

    instance = this;
  }
}

var Sun = createSunSingleton();

var sun1 = new Sun;
Sun.instance = null;
var sun2 = new Sun;

console.log(sun1 === sun2) // true
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
KorniloFF
@KorniloFF Куратор тега JavaScript
Работаю по font-end / JS
'use strict';
	var SunInited;
	function Sun() {
		SunInited= SunInited || {
			color: 'yellow',
			isBig: true
		}
    return SunInited
    
}

var sun1 = new Sun;

var sun2 = new Sun;

 // true.
console.log(sun1 === sun2);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы