Javascript 闭包编译器更新字符串属性名称引用

Javascript 闭包编译器更新字符串属性名称引用,javascript,google-closure-compiler,Javascript,Google Closure Compiler,假设我们有一个对象轮询,对象函数如下所示,我想使用类似的函数调用每个fn。在gcc高级最小化之前,我们可以通过.invoke(pool,“fn”)轻松做到这一点,没有问题。但是,缩小后,fn可能是c或其他一些属性名称。。。是否有提示gcc字符串引用属性名的提示?我希望它在缩小代码后将调用更新为。.invoke(pool,“c”) 有关此问题的重复示例,请尝试在此脚本上运行带有高级编译的gcc: // ==ClosureCompiler== // @externs_url http://cdn.j

假设我们有一个对象轮询,对象函数如下所示,我想使用类似的函数调用每个
fn
。在gcc高级最小化之前,我们可以通过
.invoke(pool,“fn”
)轻松做到这一点,没有问题。但是,缩小后,
fn
可能是
c
或其他一些属性名称。。。是否有提示gcc字符串引用属性名的提示?我希望它在缩小代码后将调用更新为
。.invoke(pool,“c”)

有关此问题的重复示例,请尝试在此脚本上运行带有高级编译的gcc:

// ==ClosureCompiler==
// @externs_url http://cdn.jsdelivr.net/g/underscorejs
// @compilation_level ADVANCED_OPTIMIZATIONS
// ==/ClosureCompiler==
var pool = [{fn: function() {}, prop2: 1}, {fn: function() {}, prop2: 2}, {fn: function() {}, prop2: 3}]
_.invoke(pool, "fn");
产生明显不同的代码:

_.invoke([{a:function(){},b:1},{a:function(){},b:2},{a:function(){},b:3}],"fn");
我希望得到的编译代码将是

_.invoke([{a:function(){},b:1},{a:function(){},b:2},{a:function(){},b:3}],"a");

只需引用您不想重命名的属性名称:

var pool = [{"fn": function() {}, "prop2": 1}, {"fn": fun ...

另请参见:

有几种方法:

1) 引用原始属性定义:

{"fn": ...}
2) 在外部文件中提供定义:

/** @type {Object} */
var methods;
methods.fn;
3) 使用神奇的“JSCompiler_renameProperty”方法:

这并没有太多使用(所以有更高的机会成为片状),并且不推荐用于基于类型的优化。请注意,您提供了一个存根实现,如:

function JSCompiler_renameProperty(a) { return a; }

如果您想让代码在未编译或编译时不发出警告。

最好将它们重命名为一个缩小的名称,我可以将
“fn”
字符串标记为属性名。我要对其执行此操作的属性名是
targetElement
,并在整个过程中显示code@megawac是的,我知道你想要实现什么,但我认为这根本不可能。嗯,我明天会在他们的irc频道上询问,看看是否有更好的答案:/。考虑到这一点,似乎有些可疑
function JSCompiler_renameProperty(a) { return a; }