Singleton .
Отвечу тут Дмитрию, на хабре дискутировать неудобно.
Singleton'у может понадобиться конструктор, который желательно вызвать в момент первого использования объекта. Тогда простой объект будет использовать неудобно. Я вот здесь в конце статьи привел вариант реализации Singleton, но, честно говоря, сам им пока не пользовался :) |
Цитата:
Цитата:
Цитата:
В качестве преимущества, можно выделить хранение в контексте конструктора каких-то вспомогательных "скрытых" сущностей (которые могут быть использованы в методах объекта), но тот же результат можно получить простым созданием контекста из FE, которая уничтожится сразу после инициализации объекта. Но, в качестве теоретической имитации шаблона "Singleton" из классовой парадигмы, можно и использовать предложенный вариант, но, с практической точки зрения, я не вижу особой надобности. |
Цитата:
|
Цитата:
|
Kolyaj, там же, на Хабре, приводят преимуществом наследование, с этим - согласен.
|
Цитата:
var S = {...};
if (...) {
// Здесь S нужен
} else {
// А здесь не нужен
}
Цитата:
|
Цитата:
Цитата:
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). |
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
|
| Часовой пояс GMT +3, время: 18:53. |