我喜欢Google Closure编译器如何优化代码中的符号。但是,我还没有找到一种好的方法来定义将配置对象作为参数的公共导出函数。考虑下面的代码片段:使用Google Closure定义配置对象的最佳方式
goog.provide('foo');
goog.require('goog.dom');
/** @typedef {{
* id : string,
* clazz : string
* }}
*/
foo.config;
/**
* Does some neat stuff
* @param {foo.config} config
*/
foo.myFoo = function(config) {
var el = goog.dom.getElement(config.id);
goog.dom.classes.add(el, config.clazz);
}
goog.exportSymbol('foo.myFoo', foo.myFoo);
现在假设我们加载这个脚本,并要拨打myFoo如下:
<script type="text/javascript">
foo.myFoo({
id: 'unique-id',
clazz: 'pretty'
});
</script>
如果编译,这将失败,因为ID和clazz中性能进行了压缩。
有谁知道使用Google Closure编译器实现和导出配置对象的优雅方法吗?
谢谢!我试图解决同样的问题,这工作。但我不确定我是否明白为什么编译器在使用点表示法时会混淆属性名称,但在使用方括号表示法时不会。我知道方括号表示法允许使用变量,但编译器是否也会混淆这些变量? – 2010-11-05 01:59:38
为什么要将参数更改为“对象”?他的类型定义很好,他只需要声明一个extern或者使用字符串文字:config ['id']'而不是'config.id'。删除正确的类型定义意味着如果他从编译的代码中调用了该函数,他就不会有任何类型检查。打败点,不是? – EMMERICH 2011-03-01 09:07:14
我对注解的理解是它用于人类,使其更像一条更优雅的评论线。更重要的是,如果该方法使用不当,它可以让谷歌抛出错误。 – 2011-05-24 19:58:42