Лучшие практики для пространств имен 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 возвращает функцию, а не объект.

Другие вопросы по тегам