У вас есть ошибка в первом, вы использовали this
, где я почти уверен, что вы имели в виду ns
:
ns.DoStuff = function() {
};
Если оставить в стороне, ваш первый подход имеет тенденцию бытьлучше, потому что вы создали для себя небольшую небольшую функцию определения объема, которая позволяет вам иметь частные данные и функции, доступные для всех открытых методов, которые вы создаете в своем пространстве имен, не делая их глобальными.Например:
(function(ns) {
function privateFunction() {
}
ns.DoStuff = function() {
privateFunction(); // <=== works fine
};
})(myNamespace);]
privateFunction(); // <=== doesn't work, because it's private
Мне нравится делать это таким образом частично, потому что Я имею дело с анонимными функциями , и поэтому я бы не определил DoStuff
как выше, а скорее так:
(function(ns) {
ns.DoStuff = Namespace$DoStuff;
function Namespace$DoStuff() {
}
})(myNamespace);
Теперь функция, которую я назначил для myNamespace.DoStuff
, имеет правильное имя, которое помогает мне при отладке кода.Но это имя не загрязняет глобальное пространство имен, что помогает мне оставаться в здравом уме и избегать конфликтов с другим кодом.