Сообщение от Андрей Параничев
|
Или я не прав?
|
Прав =) Более того, даже и второй случай синглтоном (в понимании паттерна при классовом ООП) нельзя считать (в том плане, что даже и нет возможности повторно обратиться к "классу", чтобы он вернул тот же инстанс). Просто данную конструкцию -
(function() { ... __init__(); ... })(); - иногда называют (инициализирующим) синглтоном. И в ключе использования вспомогательных инициализирующих var'ов и локальных функций (именно для этого и выделяется локальный скоп этой анонимной функции, которая запустится единожды и исчезнет (если, конечно, не будет ссылок на нее), хотя, скоп ее останется)) - вполне удобно.
Скорость определения замкнутых var'ов, естественно, будет медленнее, т.к. они находятся не в родном скопе (в смысле,
return this.a будет быстрее, чем
return a, где a - локальный замкнутый var).
А подобие (имитация) классического паттерна могла бы выглядеть, например, так:
function SingletonClass() {
}
SingletonClass.getInstance = function() {
if (!SingletonClass.instance) {
SingletonClass.instance = new function() {
this.a = 10;
return true;
};
SingletonClass.instance.getA = function() {
return this.a;
};
SingletonClass.instance.setA = function(a) {
this.a = a;
return true;
};
}
return SingletonClass.instance;
};
var a = SingletonClass.getInstance();
a.setA(20);
var b = SingletonClass.getInstance();
alert(b.getA());