在我发送给Google Closure模板的数据中,我有一个名为default
的属性。我计划使用Google Closure Compiler编译SoyToJsSrcCompiler生成的JavaScript代码和代码。但问题是模板生成的代码会阻止编译器重命名default
属性。
这是模板代码:
/**
* @param test
*/
{template .template}
<div>{$test.a.b.default.c.d}</div>
{/template}
这是生成的代码:
/**
* @param {Object.<string, *>=} opt_data
* @param {(null|undefined)=} opt_ignored
* @return {string}
* @notypecheck
*/
test.template = function(opt_data, opt_ignored) {
return '<div>' + soy.$$escapeHtml(opt_data.test.a.b['default'].c.d) + '</div>';
};
我有什么方法可以得到:
opt_data.test.a.b.default.c.d
intead of:
opt_data.test.a.b['default'].c.d
或我可以将我的财产命名为default
的任何其他方式?
现在,编译器在我的JavaScript代码中重命名default
属性,但不会在SoyToJsSrcCompiler生成的代码中重命名它,因为此代码使用引用的版本。
答案 0 :(得分:1)
default
是JavaScript中的半保留字。它用于switch case
语句:
switch ( variable ) {
case a:
break;
case b:
break;
default:
break;
}
在对象旅行中它是完全安全的,但不是作为范围级变量:
object.some.thing.else.default;
考虑这个对象树:
var a = {
b: {
c: {
"1": {
"default": 2
}
}
}
};
您可以通过说:
获取值(2
)
a.b.c[1].default // 2
但是:
a["b"]["c"]["1"]["default"] // 2
JSHint会针对非qoute所需情况引用对象进行引发警告。在这种情况下,["b"]
,["c"]
,["default"]
。
答案 1 :(得分:0)
目前似乎没有任何支持的方式来执行此操作。我将属性的名称从default
更改为可以正确重命名的其他名称。