7

汎用ユーティリティ関数をホストするためにJQuery 名前空間を実装するための現在の「経験則」は何ですか?

1 つ (または複数) の名前空間に統合したいさまざまなファイルに多数の JavaScript ユーティリティ メソッドが分散しています。これを行う最善の方法は何ですか?

現在、優先順にリストされている 2 つの異なる構文を検討しています。

  //******************************
  // 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 はより冗長ですが、今後の保守が容易になるようです。メソッド間にコンマを追加する必要はなく、すべての関数を左揃えにすることができます。

これを行うための他のより良い方法はありますか?

4

2 に答える 2

3

jQuery プラグインなどの$.fn.myPlugin場合、要素で使用できるようにする$.whatever場合、および名前空間のみを使用する場合は、パターンを使用します。公式のPlugins Authoring ドキュメントこれらの 記事を読むことをお勧めします。

ただし、jQuery は別として、utils の名前空間を作成する最も簡単な方法は次のとおりです。

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

JS の名前空間の基本は最近変わっていません。snook の記事DED のエレガントなアプローチ、およびこの SO の質問を確認してください。

自己呼び出し関数を使用して名前空間を宣言する主な利点は、オブジェクトを返す前に非公開で実行できることです。また、オブジェクトは、コンソールによるオートコンプリートの準備が整います。これは、$jQuery がオブジェクトではなく関数を返すため、名前空間では見逃されます。

于 2011-05-14T22:20:48.883 に答える
1

記録のために、私は最初の構文を使用することになりました:

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

});
于 2011-06-04T07:04:26.447 に答える