在 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}};
我怎么能用咕噜声做呢?
在 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}};
我怎么能用咕噜声做呢?
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
}
};
压缩器/压缩器非常努力地不改变代码的逻辑。因此,如果您的逻辑使用多个语句构建一个对象,那么您的缩小代码将包含多个语句。
所以在我看来,你期望缩小器做一些它永远不会做的事情,而且它永远不应该做。