Билли Мун показывает хорошее начало, но проблема с использованием литералов объекта в том, что вы не можете перекрестно ссылаться на другие поля / функции / свойства.
Я очень предпочитаю шаблон раскрывающегося модуля (см. http://www.wait -till-i.com / 2007/08/22 / снова с модулем-шаблоном-раскрыть что-то миру) / )
шаблон раскрывающего модуля объединяет самовыполняющуюся функцию, использование (своего рода) замыканий для предоставления внутренних закрытых функций / полей и позволяет передавать параметры для инициализации вашего пространства имен.
var namespacedObject = function(param) {
var settings = param || someDefaultSetting, //default if no param supplied
somePrivateField = "someValue",
somePublicField = "i'm public";
//define some method we will later make public
function toggleComments(){
$("comments-section").hide();
$("comments-button").click(function (){
$(this).value= somePrivateField;
return false;
});
}
//this is where the magic happens,
//return object with all public fields/functions
return {
toggleComments : toggleComments,
somePublicField : somePublicField
};
}(someParam);
Вы можете видеть, что объект пространства имен содержит приватное поле somePrivateField
, на которое можно ссылаться из общедоступных методов. Кроме того, обратите внимание, что я выставил открытое поле и принял некоторые параметры, которые я могу использовать / использовать в функциях и т. Д. (И вы можете установить по умолчанию его значение по умолчанию, если ничего не передано.
можно использовать так:
namespacedObject.toggleComments();
alert(namespacedObject.somePublicField);
alert(namespacedObject.somePrivateField); //undefined - it's private of course!
одна из причин, по которой мне это нравится, в том, что очень легко увидеть, что является публичным / приватным, просто взглянув на литерал объекта, возвращаемый из самовыполняющейся функции
Надеюсь, это полезно