谷歌闭包编译器不重命名属性

时间:2012-03-07 22:52:06

标签: javascript google-closure-compiler

我有一个从JSON.parse生成的对象数组。我访问它的属性如下:

AnObject['PhoneList'][i]['PhoneLabel']

当我通过谷歌闭包编译器运行代码时,属性的名称不会被混淆并且清晰可见。为什么对象属性的名称没有混淆?

3 个答案:

答案 0 :(得分:2)

谷歌关闭时很难搞清楚它能做什么,不能重命名。例如,任何由Google闭包编译代码之外的代码创建或引用的数据结构都无法重命名,或者双方不会期望相同的代码。此外,通过构造的字符串引用属性使得闭包几乎不可能很好地完成它。因此,Closure有一大堆规则和设置可以帮助您控制并指导它做什么。我建议你阅读这些参考资料中的规则/设置:

https://developers.google.com/closure/compiler/docs/api-tutorial3

https://developers.google.com/closure/compiler/docs/compilation_levels

https://groups.google.com/group/closure-stylesheets-discuss/browse_thread/thread/386ba6db27a43887?pli=1

https://developers.google.com/closure/compiler/docs/limitations

并引用了最后的参考文献:

  

函数或参数名称的字符串表示:

     

编译器重命名函数和函数参数但不重命名   更改代码中引用函数或参数的任何字符串   按名字。因此,您应该避免表示函数或参数   在代码中将名称作为字符串。例如,Prototype库   function argumentNames()使用Function.toString()来检索   函数参数的名称。但是虽然argumentNames()可能会   诱惑你在代码中使用简单模式中的参数名称   汇编打破了这种参考。

答案 1 :(得分:0)

带引号的字符串是用于不应重命名(“导出”)的属性的语法。 你可能想用

AnObject.PhoneList[i].PhoneLabel

代替。

答案 2 :(得分:0)

Google Closure Compiler不会触及引用的字符串。

myObj.prop = 3;

会导致 prop 重命名(也许也是myObj)

myObj['prop'] = 3;

将导致'prop'保持不变。