0

この場合、サイトは IE6 でのみ表示できる内部 Web サイトです。目標は、IE9 で表示できるようにすることです。xml データ アイランドの使用、ドット表記によるドキュメント要素へのアクセスなど、IE のみの適切なスクリプトがいくつかありますresulttable.style.display = "block";

Web サイト全体に、非常に大きくてデバッグが難しい JavaScript メソッドが多数あります。参考までに、それぞれ平均約 1000 行の 100 以上の JS ファイルがあります。

以下は、すべての名前/ロジックを省略した実際のメソッドです。すべての戻り値は、前のロジックに依存しています。

function someMethod() {
if (stuff) {
    // operations
    if (stuff) {
        // operations
        for (loop) {
            // operations
            if (stuff) {
                // operations
                if (stuff) {
                    // operations
                    for (loop) {
                        if (stuff) {
                            // operations
                        }
                    }
                    // operations
                }
                else {
                    // operations
                    if (stuff) {
                        // operations
                    } else {
                        // operations
                    }
                }
                // operations
            }
        }

        // operations

        if (stuff) {
            // operations
            if (stuff) {
                // operations
                if (stuff) {
                    // operations
                    for (stuff) {
                        // operations
                        if (stuff) {
                            // operations
                        } else {
                            // operations
                        }
                    }
                    if (stuff) {
                        // operations
                        if (stuff) {
                            // operations
                            for (loop) {
                                // operations
                            }
                            // operations
                            for (loop) {
                                if (stuff) {
                                // operations
                                }
                            }
                        }
                        // operations
                        if (stuff) {
                            // operations
                        }
                        return something;
                    }
                    else {
                        // operations
                        return something;
                    }
                }
                else {
                    // operations
                    if (stuff) {
                        // operations
                        return something;
                    }
                    else {
                        // operations
                        if (stuff) {
                            // operations
                        }
                        // operations
                        return something;
                    }
                }
            }
        }
        return something;
    }
    else {
        // operations
        return something;
    }
}
return something;
}

レガシー Web サイトを扱う場合、JavaScript メソッドをより管理しやすい部分に分割するためのアドバイスはありますか?

免責事項: 私の JS スキルセットは平均的なものです。そして、当面は JQuery を避けたいと思います。

4

1 に答える 1

1

someMethod() を個々の関数に分割して、ロジックを繰り返すことができます。

また、特定のロジックを調べて、ロジックに最適なパターンを見つけることなく、役立つ可能性のある一般的なパターンがいくつかあります。

モジュールパターン

var MyModule = function() {
    function privateFn() {
    }
    function publicFn() {
    }
    function doWork(args) {
    }

    return {
        publicFn: publicFn,
        doWork: doWork,
    };
}();
MyModule.doWork({ param1: 'test', param2: true});

プロトタイプの継承は、c#/Java のクラスと同様に使用できます。

var MyClass = function(args) {
    this.prop1 = 'test'
    this.prop2 = args.param1;
};
MyClass.prototype.doWork = function(args) {
};
var myInstance = new MyClass({ param1: 'test' });
myInstance.doWork({ param1: true });

名前空間を使用してこれらを整理できます。

if (window.MyNamespace === undefined) window.MyNamespace = {};
MyNamespace.MyModule = function () { ... };
MyNamespace.MyClass = function () { ... };
MyNameSpace.MyModule.doWork();

役立つ可能性のある追加のパターンは、ここにありますhttp://shichuan.github.com/javascript-patterns/

于 2012-07-18T06:00:16.607 に答える