На самом деле, это все о семантике. Если вы разбиваете код на несколько файлов и планируете использовать общее пространство имен, то сделать что-то вроде этого немного проще:
Причина, по которой мне нравится этот метод, заключается в том, что он гораздо более модульный и позволяет разбивать код на несколько файлов, а затем просто сжимать их в один без проблем с зависимостями (если ваши функции пространства имен не зависят друг от друга)
Недостатком этого является то, что иногда он может быть немного грязным, если используется неправильно - что, я думаю, может относиться ко всему.
В вашем файле пространства имен
var Namespace = {};
В других ваших файлах JavaScript, которые используют пространство имен
var Namespace = Namespace === undefined ? {} : Namespace;
Namespace.stuff = function () {
var private = 'foo';
function private_func() {
};
this.public = 'bar';
this.public_func = function () {
}
};
Некоторое практическое применение будет:
GUI.js
// Some general GUI
var GUI = {
'MAX_WIDTH': $(window).width(),
'MAX_HEIGHT': $(window).height()
};
toolbar.js
GUI.Toolbar = function (id) {
var self = this;
function init_visuals() {
$(id).click(function () {
self.alert_broken();
});
};
function initialize() {
init_visuals();
};
this.alert_broken = function () {
alert('Broken!');
};
initialize();
};
Menu.js
GUI.Menu = function () {
}; GUI.Menu.prototype = new GUI.Toolbar();
Теперь, синглтонс - это еще один аргумент.