2011-07-25 8 views
0

私はjQueryプラグインを圧縮するためにYUICompressorを使用しています。当初、私は警告の多くは、「一つだけvarステートメントおよび機能ごとに1つのリターンを持っているようにしてください」なったので、私は次の例のように上部にあるすべての宣言を置く:大きなプラグインでYUICompressorの警告を避けながら、Javascriptでグローバルな名前空間の汚染を防ぐにはどうしたらいいですか?

 $.fn.myWidget = function() { 

      var function1, function2, function3 

      function1 = function() { 

       // Do stuff 

      }; 

      function2 = function() { 

       // Do stuff 

      }; 

      // This will be a global function 
      function3 = function() { 

       // Do stuff 

      }; 

     }; 

これはコードになりメンテナンスの悪夢。

私はfunction4を追加しますが、変数宣言を追加するのを忘れてしまいました。トップを追加すると、実際にグローバルウィンドウ名前空間に変数を作成しています。 プラグインがページで複数回使用されると、グローバル関数が上書きされます。

は今、私はグローバル名前空間の汚染をチェックするために、次のスクリプトを実行していますが、誰もがよりよい解決策私はマップ形式で関数を宣言することを好む

 for (var f in window) { 
      if (window.hasOwnProperty(f)) { 
       $("#debug").append(f + " " + " Type: " + typeof window[f] + "<br>"); 
      } 
     } 

答えて

1

を持っている場合、私は思っていた、それが削除されます宣言をコードから分離する問題。

$.fn.myWidget = function() { 

     var a, b, c, //internal vars 
     myWidget = { 
      function1: function() { 

      // Do stuff 

      }, 
      function2: function() { 

      // Do stuff 

      }, 
      function3: function() { 

      // Do stuff 

      } 
     } 

     return myWidget; 

    }; 

なぜウィジェットにグローバル機能がありますか?ウィジェットの目的を破ることはありませんか?ウィジェットの宣言の外に置いてください。 このスタイルを使用して質問を読み返すと、誤ってグローバル関数を作成することもなくなります。

さらに、jQuery DOCsは、正しく実行するために多くのアドバイスを提供します

関連する問題