以下示例代码生成有关高级优化的编译器警告:“JSC_UNSAFE_NAMESPACE:为命名空间 NS 创建的不完整别名”。如果我删除 @enum 注释,它不会发出警告。
var NS = {};
/**
* @enum {string}
*/
NS.type = {
FOO : 'bar'
};
NS.foobar = function(){ alert(NS.type.FOO); };
window['NS'] = NS;
window['NS']['foobar'] = NS.foobar;
仅导出函数而不导出命名空间似乎也有效:
window['NS_foobar'] = NS.foobar;
我究竟做错了什么?有没有解决的办法?如果可能的话,我宁愿不包含 Closure 库。
编译器希望将枚举值折叠为单个变量:
NS.type.FOO 变为 NS$type$FOO。您导出的“NS”不会包含您期望的内容。
我怀疑你想要这样的东西:
window['NS'] = {}; // an external namespace object.
window['NS']['foobar'] = NS.foobar; // add 'foobar' to the external namespace.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)