-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

Minifiers 不应该改变你的代码的执行方式。因此,如果您想要不同的结构,请以不同的方式构建您的对象。

假设你从这个开始:

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 回答