Лучшие практики для пространств имен JQuery + универсальные служебные функции
Каковы некоторые текущие практические правила для реализации пространств имен JQuery для размещения служебных функций общего назначения?
У меня есть несколько утилит JavaScript, разбросанных по разным файлам, которые я хотел бы объединить в одно (или несколько) пространств имен. Какой лучший способ сделать это?
В настоящее время я смотрю на два разных синтаксиса, перечисленных в порядке предпочтения:
//******************************
// JQuery Namespace syntax #1
//******************************
if (typeof(MyNamespace) === "undefined")
{
MyNamespace = {};
}
MyNamespace.SayHello = function ()
{
alert("Hello from MyNamespace!");
}
MyNamespace.AddEmUp = function (a, b)
{
return a + b;
}
//******************************
// JQuery Namespace syntax #2
//******************************
if (typeof (MyNamespace2) === "undefined")
{
MyNamespace2 =
{
SayHello: function ()
{
alert("Hello from MyNamespace2!");
},
AddEmUp: function (a, b)
{
return a + b;
}
};
}
Синтаксис #1 более многословен, но, кажется, его будет проще поддерживать в будущем. Мне не нужно добавлять запятые между методами, и я могу выровнять все свои функции влево.
Есть ли другие, лучшие способы сделать это?
2 ответа
Для записи я использовал первый синтаксис:
$(function ()
{
//********************************
// PREDIKT NAMESPACE
//********************************
if (typeof (Predikt) === "undefined")
{
Predikt = {};
}
//********************************
// PREDIKT.TIMER NAMESPACE
//********************************
if (typeof (Predikt.Timer) === "undefined")
{
Predikt.Timer = {};
}
Predikt.Timer.StartTimer = function ()
{
return new Date().getTime();
};
Predikt.Timer.EndTimer = function ()
{
return new Date().getTime();
};
});
Для плагинов JQuery и такой шаблон должен использовать $.fn.myPlugin
если вы хотите, чтобы он был доступен для элементов, и $.whatever
если вы просто хотите использовать пространство имен. Я рекомендую прочитать официальный документ по разработке плагинов и эти статьи.
Но, если не считать jQuery, самый простой способ определить пространство имен для ваших утилит - это:
var utils = window.utils || {};
utils.method = function(){};
Основы пространства имен в JS за последнее время практически не изменились - вы должны ознакомиться со статьей snook, элегантным подходом DED и таким SO вопросом.
Основное преимущество использования функции, вызываемой самим собой для объявления пространств имен, заключается в том, что вы можете выполнять вещи конфиденциально, прежде чем возвращать объект. Кроме того, объект будет готов к автозаполнению с помощью вашей консоли, который вы пропустите на $
пространство имен, потому что jQuery возвращает функцию, а не объект.