gpt4 book ai didi

javascript - Closure Compiler 更新字符串属性名称引用

转载 作者:行者123 更新时间:2023-11-29 10:15:24 26 4
gpt4 key购买 nike

假设我们有一个对象轮询,对象的函数如下所示,我想使用类似 _.invoke 的方式调用每个 fn .我们可以在 gcc 高级最小化之前通过 _.invoke(pool, "fn") 轻松做到这一点,没问题。然而,在 minifcation 之后,fn 可能是 c 或其他一些属性名称...是否有任何方式提示 到 gcc 一个字符串正在引用一个属性(property)名称?我希望它在缩小代码后将我的调用更新为 _.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");

最佳答案

有几种方式:

1)引用原属性定义:

{"fn": ...}

2) 在外部文件中提供定义:

/** @type {Object} */
var methods;
methods.fn;

3) 使用神奇的“JSCompiler_renameProperty”方法:

_.invoke(pool, JSCompiler_renameProperty("fn"));

这用得不多(因此出现不稳定的可能性更高)并且不推荐用于基于类型的优化。请注意,您提供了一个 stub 实现,例如:

function JSCompiler_renameProperty(a) { return a; }

如果您希望代码在未编译或编译时没有警告的情况下运行。

关于javascript - Closure Compiler 更新字符串属性名称引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23188954/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com