我有一个从JSON.parse生成的对象数组。我访问它的属性如下:
AnObject['PhoneList'][i]['PhoneLabel']
当我通过谷歌闭包编译器运行代码时,属性的名称不会被混淆并且清晰可见。为什么对象属性的名称没有混淆?
答案 0 :(得分:2)
谷歌关闭时很难搞清楚它能做什么,不能重命名。例如,任何由Google闭包编译代码之外的代码创建或引用的数据结构都无法重命名,或者双方不会期望相同的代码。此外,通过构造的字符串引用属性使得闭包几乎不可能很好地完成它。因此,Closure有一大堆规则和设置可以帮助您控制并指导它做什么。我建议你阅读这些参考资料中的规则/设置:
https://developers.google.com/closure/compiler/docs/api-tutorial3
https://developers.google.com/closure/compiler/docs/compilation_levels
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'保持不变。