Показать сообщение отдельно
  #20 (permalink)  
Старый 02.06.2008, 22:25
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от Андрей Параничев
Или я не прав?
Прав =) Более того, даже и второй случай синглтоном (в понимании паттерна при классовом ООП) нельзя считать (в том плане, что даже и нет возможности повторно обратиться к "классу", чтобы он вернул тот же инстанс). Просто данную конструкцию - (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());
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 02.06.2008 в 22:42.
Ответить с цитированием