-3

concat の後、私は JavaScript を持っています:

Tasks={a:1,b:2},Tasks.Test={a:1,b:2},Tasks.Test.TestA={a:1,b:2},Tasks.TestB={a:1,b:2};

でも私はしたい:

Tasks={a:1,b:2,Test:{a:1,b:2,TestA:{a:1,b:2}},TestB:{a:1,b:2}};

どうすればうなり声でそれを行うことができますか?

4

1 に答える 1

0

ミニファイアは、コードの実行方法を変更するべきではありません。したがって、別の構造が必要な場合は、別の方法でオブジェクトを構築してください。

これで始めるとしましょう:

var Tasks = {a:1,b:2};
Tasks.Test = {a:1,b:2};

if (shouldIncludeTestA()) {
    Tasks.Test.TestA = {a:1,b:2};
}

if (shouldIncludeTestB()) {
    Tasks.TestB = {a:1,b:2};
}

このようにオブジェクトを構築する唯一の理由は、特定の部分が動的である場合、つまり実行時に変更される可能性がある場合です。たとえば、 ifTasks.Test.TestAは空白の場合もあれば、より多くのデータを含むオブジェクトの場合もあります。

したがって、オブジェクトの作成方法を制御するコードがある場合、それを単一のオブジェクト リテラルに圧縮することはできません。これは、オブジェクトの作成方法を制御するコードを削除することを意味するからです。

一方、オブジェクトが毎回同じ構造を持っている場合は、それを単一のオブジェクト リテラルとして構築するだけで、単一のオブジェクト リテラルとして縮小されます。

var Tasks = {
    a: 1,
    b: 2,
    Test: {
        a: 1,
        b: 2,
        TestA: {
            a: 1,
            b: 2
        }
    },
    TestB: {
        a: 1,
        b: 2
    }
};

コンプレッサー/ミニファイアーは、コードのロジックを変更しないように非常に懸命に努力します。したがって、ロジックが複数のステートメントでオブジェクトを構築する場合、縮小されたコードには複数のステートメントが含まれます

したがって、ミニファイヤが決して実行しないこと、および実行してはならないことを期待しているように思えます。

于 2013-06-07T20:06:49.910 に答える