Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.10.2009, 14:39
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Singleton .
Отвечу тут Дмитрию, на хабре дискутировать неудобно.

Singleton'у может понадобиться конструктор, который желательно вызвать в момент первого использования объекта. Тогда простой объект будет использовать неудобно.

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

Сообщение от Kolyaj
Отвечу тут Дмитрию
Сообщение от Kolyaj
Я вот здесь в конце статьи привел вариант реализации Singleton
Да, спасибо, я уже читал эту статью.

Сообщение от alljs.ru
Особенность этого метода заключается еще и в том, что если экземпляр класса не понадобится, то не создается не только экземпляр, но и сам класс. При этом ключевое слово new становится вовсе опциональным, главное скобочки не забыть.
На самом деле, если экземпляр не понадобится, то мы и не создадим этот объект. В твоём варианте, если экземпляр понадобится, будет создан и объект, и конструктор.

В качестве преимущества, можно выделить хранение в контексте конструктора каких-то вспомогательных "скрытых" сущностей (которые могут быть использованы в методах объекта), но тот же результат можно получить простым созданием контекста из FE, которая уничтожится сразу после инициализации объекта.

Но, в качестве теоретической имитации шаблона "Singleton" из классовой парадигмы, можно и использовать предложенный вариант, но, с практической точки зрения, я не вижу особой надобности.
__________________
Тонкости ECMAScript
Ответить с цитированием
  #3 (permalink)  
Старый 06.10.2009, 15:45
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Dmitry A. Soshnikov
На самом деле, если экземпляр не понадобится, то мы и не создадим этот объект.
В обычном варианте var S = {} он создастся в любом случае.
Ответить с цитированием
  #4 (permalink)  
Старый 06.10.2009, 16:02
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от Kolyaj
В обычном варианте var S = {} он создастся в любом случае.
Да, и это означает, что он нужен. Если не нужен - не создаётся (т.е. его нет в коде).
__________________
Тонкости ECMAScript
Ответить с цитированием
  #5 (permalink)  
Старый 06.10.2009, 17:28
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Kolyaj, там же, на Хабре, приводят преимуществом наследование, с этим - согласен.
__________________
Тонкости ECMAScript
Ответить с цитированием
  #6 (permalink)  
Старый 06.10.2009, 18:05
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Dmitry A. Soshnikov
Если не нужен - не создаётся (т.е. его нет в коде).
var S = {...};
if (...) {
    // Здесь S нужен
} else {
    // А здесь не нужен
}


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

Сообщение от Kolyaj
// Здесь S нужен
Сообщение от Kolyaj
// А здесь не нужен
Ну, всё правильно (даже, если динамически, по условию):

if (...) {
  var S = {};
} else {
  ...
}


В любом случае (и в твоей реализации тоже), переменная "S" уже будет в объекте переменных.

Ещё преимуществом можно выделить частые подобные проверки с if-ми-else-ами. Чтобы каждый раз не проверять, инициализирован ли уже объект (if typeof S !== 'undefined'), можно вынести его в геттер (который и называется в данном случае "Singleton"):

function getOurObject() {
  if (!arguments.callee.instance) {
    arguments.callee.instance = {...};
  }
  return arguments.callee.instance;
}


В общем, два преимущества:

1. Наследование (если нужно);
2. Улучшение code-reuse, чтобы сократить код (этот пункт, в данном случае, является разновидностью memoization).
__________________
Тонкости ECMAScript
Ответить с цитированием
  #8 (permalink)  
Старый 06.10.2009, 18:37
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Dmitry A. Soshnikov
if (...) {
  var S = {};
} else {
  ...
}
А если несколько таких if'ов?

Сообщение от Dmitry A. Soshnikov
В любом случае (и в твоей реализации тоже), переменная "S" уже будет в объекте переменных.
Переменная будет, но значения-то у нее не будет.
Ответить с цитированием
  #9 (permalink)  
Старый 06.10.2009, 18:40
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от Kolyaj
А если несколько таких if'ов?
Да, я это отметил:
Сообщение от Dmitry A. Soshnikov
Ещё преимуществом можно выделить частые подобные проверки с if-ми-else-ами. Чтобы каждый раз не проверять, инициализирован ли уже объект (if typeof S !== 'undefined'), можно вынести его в геттер
Сообщение от Kolyaj
Переменная будет, но значения-то у нее не будет.
Ну так и в простом случае (var S = {}) так же, разницы нет здесь.
__________________
Тонкости ECMAScript
Ответить с цитированием
  #10 (permalink)  
Старый 06.10.2009, 18:42
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Dmitry A. Soshnikov
Да, я это отметил:
И пришел в результате к синглтону, про который сказал в начале
Цитата:
На кой ляд? Если можно просто создать объект?
Ответить с цитированием
Ответ



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

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


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