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更详细,但似乎更容易维护。 我不需要在方法之间添加逗号,并且可以将所有函数对齐。

还有其他更好的方法来做到这一点吗?


对于jQuery插件,这种模式是使用$.fn.myPlugin如果你想让它在元素上可用,以及$.whatever如果你只是想使用命名空间。 我建议阅读官方的插件创作文档和这些文章。

但是,抛开jQuery,命名空间的最简单的方法是使用这些命令:

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

JS中的命名空间的基础知识最近没有真正改变 - 你应该看看snook的文章,DED的优雅方法和这个SO问题。

使用自调用函数来声明名称空间的主要优点是您可以在返回对象之前私下执行一些东西。 此外,该对象将准备好通过控制台自动完成,因此您会错过$命名空间,因为jQuery返回的是函数而不是对象。


为了记录,我最终使用了第一种语法:

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

});
链接地址: http://www.djcxy.com/p/49543.html

上一篇: Best practices for JQuery namespaces + general purpose utility functions

下一篇: ASP.NET Web Application (MVC) Deployment Automation and Subversion