Google Closure Compiler,一些属性永远不会被重命名?

时间:2016-03-31 13:41:29

标签: javascript google-closure-compiler

今天我发现Google Closure Compiler与属性重命名有关的问题。如果有人能解释我为什么这个代码会很高兴:

// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// @output_file_name default.js
// ==/ClosureCompiler==

// ADD YOUR CODE HERE


console.info({
  foo: 'bar',
  index: 10,
  bla: 'x'
});
总是编译成:

console.info({b:"bar",index:10,a:"x"});

属性“index”永远不会被重命名为某个不同的名称。问题是为什么?以及如何强制重命名?

2 个答案:

答案 0 :(得分:1)

通常,Closure Compiler可以根据类型重命名。但是,面对松散的类型,它确实会退缩。未直接分配给原型属性的对象文字是其中一种松散类型。这里没有重命名,因为标准外部存在“index”属性。有几个定义,但这里有一个:

https://github.com/google/closure-compiler/blob/641cf61b99280b8bb4b62ecce873e51208501fec/externs/es3.js#L718

答案 1 :(得分:0)

只是没有时间理解这个“非常聪明的逻辑”,我只是将这个属性重命名为其他对象未使用的其他属性。