gpt4 book ai didi

javascript - 即使在使用对象时如何强制 Google Closure Compiler 重命名方法

转载 作者:行者123 更新时间:2023-11-30 17:49:00 26 4
gpt4 key购买 nike

当我使用“this”时,google 闭包编译器 (http://closure-compiler.appspot.com/home) 似乎保留了所有方法名称。或者在使用揭示模块模式时。当方法不在可能被其他外部方法引用的对象中时,它似乎只会将方法重命名为字母。我已经尝试包装我的 (Utility) 对象和使用它的匿名方法,但这似乎没有帮助。您如何创建可以相互共享的对象(和单独的脚本文件)并仍然使用它缩写所有方法名称?

我读了几篇关于 SO 的文章,没有看到任何解决这个问题的文章,只有关于由于与外部变量冲突而没有重命名的东西的文章。

var Utility = (function () {
this.isDefined = function (v) {
/// <summary>Checks to see if a variable is defined.</summary>
return typeof v !== 'undefined';
}

this.isObj = function (v) {
/// <summary>Checks to see if a variable is an object.</summary>
return typeof v === 'object';
}
...

})();

然后我希望能够做到:

(function(u) {
u.isDefined();
})(Utility);

我也试过:

 var Utility = (function () {
var utility = {};

utility.isDefined = function (v) {
/// <summary>Checks to see if a variable is defined.</summary>
return typeof v !== 'undefined';
}

utility.isObj = function (v) {
/// <summary>Checks to see if a variable is an object.</summary>
return typeof v === 'object';
}

return utility;
...

最佳答案

揭示对象模式不适用于闭包编译器。您正在使用的额外闭包也不会为窗口和文档全局变量起别名。最终用例本身对于 Closure-compiler 也是有问题的。目前,编译器不能很好地处理别名,尤其是在将命名空间作为函数参数传递时。

// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// ==/ClosureCompiler==
var Utility = {};
Utility.isDefined = function (v) {
/// <summary>Checks to see if a variable is defined.</summary>
return typeof v !== 'undefined';
};

Utility.isObj = function (v) {
/// <summary>Checks to see if a variable is an object.</summary>
return typeof v === 'object';
};

(function() {
function myPrivateFunction(x) {
}
Utility.SomeMethod = function(x) {
return myPrivateFunction(x);
};
})();

Utility.isDefined(x);
window['Utility'] = Utility;

此示例的编译和重命名可以在http://closure-compiler.appspot.com/ 进行测试。

您可以通过使用 output_wrapper 标志并正确导出您的符号来防止您的局部变量渗入全局范围。

编译器还特别禁止在非构造函数、非原型(prototype)函数中使用 this 关键字。您应该始终使用完整的命名空间。然后,编译器可以展平命名空间方法(这就是出现限制的原因)。

参见 Which Compilation Level is Right for Me?

关于javascript - 即使在使用对象时如何强制 Google Closure Compiler 重命名方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19499961/

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