Я этой ссылке https://addyosmani.com/resources/essentialjsdesignpatterns/book/ понять шаблоны проектирования в JavaScript, я понял, конструктор шаблон, модуль шаблон и модуль раскрывающий шаблон, теперь в Singleton шаблон У меня есть два сомнения, которые следующие:Синглтон шаблон дизайна в Javascript
1) Я знаю C++, и сейчас изучаю JavaScript, поэтому я понимаю, что singleton pattern позволяет вам только один экземпляр класса, но в этой книге упоминается «В JavaScript, Singletons служат в качестве пространства имен общих ресурсов, которые изолируют код реализации от глобального пространства имен, так что чтобы обеспечить единую точку доступа для функций ». Что это значит ???
2)
var mySingleton = (function() {
// Instance stores a reference to the Singleton
var instance;
function init() {
// Singleton
// Private methods and variables
function privateMethod(){
console.log("I am private");
}
var privateVariable = "Im also private";
var privateRandomNumber = Math.random();
return {
// Public methods and variables
publicMethod: function() {
console.log("The public can see me!");
},
publicProperty: "I am also public",
getRandomNumber: function() {
return privateRandomNumber;
}
};
};
return {
// Get the Singleton instance if one exists
// or create one if it doesn't
getInstance: function() {
if (!instance) {
instance = init();
}
return instance;
}
};
})();
var singleA = mySingleton.getInstance();
var singleB = mySingleton.getInstance();
Мои сомнения, когда мы называем mySingleton.getInstance(); не будет значением «экземпляр» undefined снова, поскольку это локальная переменная, и каждый раз, когда мы вызываем метод getInstance, он должен устанавливать значение экземпляра как неопределенное и, следовательно, , если (! instance)
должен проходить всегда и давать новый но я не понимаю, как он работает здесь. Пожалуйста, объясните.
Нет, 'вар instance' закупоривающего, определенного в«внешней»области. (не в рамках функции 'getInstance') –
Мой совет - посмотреть, какие замыкания находятся в Javascript. –
Спасибо, точка теперь понятна ... но как насчет точки № 1? Просьба объяснить ... – user3651606