0

YUICompressor を使用して jQuery プラグインを圧縮しています。最初は「関数ごとに var ステートメントを 1 つと return を 1 つだけにしてください」という警告がたくさん出たので、次の例のようにすべての宣言を一番上に置きました。

        $.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>");
            }
        }
4

1 に答える 1

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 DOCは、それを正しく行うための多くの優れたアドバイスを提供します

于 2011-07-25T15:35:30.373 に答える