Лучшие практики для пространств имен JQuery + универсальные служебные функции - PullRequest
7 голосов
/ 28 декабря 2010

Каковы текущие «практические правила» для реализации пространств имен 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 ]

3 голосов
/ 15 мая 2011

Для плагинов jQuery и тому подобного шаблон должен использовать $.fn.myPlugin, если вы хотите, чтобы он был доступен для элементов, и $.whatever, если вы просто хотите использовать пространство имен.Я рекомендую прочесть официальный документ Авторы плагинов и эти статьи .

Но если не считать jQuery, проще всего будет найти пространство имен для ваших утилитэти строки:

var utils = window.utils || {};
utils.method = function(){};

Основы пространства имен в JS за последнее время практически не изменились - вы должны проверить статью о снуке , элегантный подход DED и этот вопрос SO .

Основным преимуществом использования самопровозглашенной функции для объявления пространств имен является то, что вы можете выполнять вещи в частном порядке перед возвратом объекта.Кроме того, объект будет готов к автозаполнению вашей консолью, которую вы пропустите в пространстве имен $, поскольку jQuery возвращает функцию, а не объект.

1 голос
/ 04 июня 2011

Для записи я использовал первый синтаксис:

$(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();
   };

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...