Сообщение от 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).