Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 06.10.2009, 19:05
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от Kolyaj
И пришел в результате к синглтону
Ну, несомненно, в плане многих проверок - да. Но терминологию "Синглтон" и этот паттерн (при той же организации) можно и не использовать. Например, в плане Java-Swing-a или JavaScript-ового Ext-фреймворка (который вдохновлён Swing-ом) можно повсеместно видеть код:

getPanel: function () {
  if (!this.panel) {
    // вычисления и создание панели
  }
  return this.panel;
}

// и потом в 10 методах
// this.getPanel()


Я говорил об _этом_, когда упомянул разновидность memoization. Здесь ближе по _идеологии_ именно к этой сущности, но не к Singleton. Хотя, в определении "возвращает один и тот же объект" - да, можно и терминологию "Singleton" приплести. Если же это ещё подкрепить и оператором new, то вообще ещё больше похоже (но сути не меняет).

Цитата:
На кой ляд? Если можно просто создать объект?
А это в плане, когда нужен просто объект и известно, что он, действительно, будет нужен.

В этом случае, смысла в дополнительном конструкторе нет. Более того, в том же Ext-e, например, люди пишут, опять же, в Java-Swing-стиле: именно для организации наследования создают наследника от какого-то базового "класса", даже, если затем этот наследник породит всего _один_ объект. Спрашивается, зачем конструктор? Для наследования. Из-за этого приходится его плодить. Если бы можно было по стандарту (а не только через __proto__ в конкретных реализациях) менять свободно прототип, то пункт с наследованием бы отпал, конструктор был бы не нужен (как, кстати, и new).
__________________
Тонкости ECMAScript
Ответить с цитированием
  #12 (permalink)  
Старый 06.10.2009, 19:19
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Dmitry A. Soshnikov
Но терминологию "Синглтон" и этот паттерн (при той же организации) можно и не использовать.
Ну не придумывать же новый термин.
Ответить с цитированием
  #13 (permalink)  
Старый 06.10.2009, 20:29
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от Kolyaj
Ну не придумывать же новый термин.
Да нет же, вот пример с геттером для this.panel из примера выше - разве ты это называешь "Синглтоном"? Технически-то понятно, что и там (паттерн "Синглтон"), и там (memoization, кэш) - возвращается один объект, но идеология-то разная.

Повторю, в ответе на Хабре имелся в виду обычный объект, который однозначно будет использоваться (и в этом плане, конструктор - лишний). Более того, если уж приплетать терминологию "Синглтон", можно и этот объект назвать "Синглтоном" (а чем он отличается от того, который будет порождён альтернативным конструктором?).

Но, опять повторюсь, чем можно оправдать наличие конструктора для одиночного объекта - это (1) наследование (и, как пример, я привожу идеологию ExtJS и её обёртку наследования - когда для одной панели нужно объявить "класс") и (2) - геттер для частых проверок.
__________________
Тонкости ECMAScript
Ответить с цитированием
  #14 (permalink)  
Старый 06.10.2009, 20:33
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Dmitry A. Soshnikov
чем можно оправдать наличие конструктора для одиночного объекта
В моем случае цели декоративные.
var S = {
// много строк кода
};

// А вот тут уже инициализация объекта
Такой код читается хуже, чем
var S = Singleton({ // <-- псевдокод
    init: function() {
        // инициализация
    },
    // остальной код
})
Ответить с цитированием
  #15 (permalink)  
Старый 06.10.2009, 20:47
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Dmitry A. Soshnikov
getPanel: function () {
  if (!this.panel) {
    // вычисления и создание панели
  }
  return this.panel;
}
Это не синглтон, для разных объектов панель будет разная.
Ответить с цитированием
  #16 (permalink)  
Старый 06.10.2009, 20:59
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от Kolyaj
Это не синглтон
Так в вопросе о множественных проверках (if-aх, else-ах), я о чём и говорю - это можно не называть "Синглтоном". Это геттер, который, одним из действий, выполняет инициализацию.
__________________
Тонкости ECMAScript
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Идея сайта... Стоит двигацца дальше?! B-Vladi Ваши сайты и скрипты 313 16.12.2011 01:04