在我的JavaScript应用程序中,我使用多个对象仅用于内部目的(用户不需要访问它们)。例如:
var images={
blank:"blank.gif",
plus:"plus.gif",
minus:"minus.gif"
}
当我使用像Uglify.js这样的缩小器时,属性名称(空白,加号,减号)保持不变。有没有办法缩小它们?
到目前为止我所考虑的事项:
有更好的方法吗?
答案 0 :(得分:5)
使用对象允许使用变量作为属性。将它包装在一个闭包中会使这些变量值得缩小。
//Wrap in closure
(function() {
//Property Variables
var blank = 0;
var plus = 1;
var minus = 2;
//Define Object
var image = [];
image[blank] = "blank.gif";
image[plus] = "plus.gif";
image[minus] = "minus.gif";
//Accessors - must be within closure
image[blank]; //blank.gif
image[plus]; //plus.gif
image[minus]; //minus.gif
})();
要访问上述值,必须在闭包中使用常量。
如果使用Google的Closure Compiler,使用var image = [];
会更有效地声明数组,因为属性值从零开始编号,即0
,1
,2
否则,var image = {};
效果也很好。
答案 1 :(得分:2)
如果您为内部属性添加了唯一的前缀,则可以按https://github.com/mishoo/UglifyJS2尝试warning C4477: 'swprintf_s' : format string '%s' requires an argument of type 'wchar_t *', but variadic argument 1 has type 'unsigned int'
warning C4474: 'swprintf_s' : too many arguments passed for format string
note: placeholders and their parameters expect 1 variadic arguments, but 2 were provided
。
这是我在gulpfile中的用法,它需要gulp-uglify。
--mangle-props regex
答案 2 :(得分:0)
[2020年5月更新] --mangle-props
的语法似乎已经发生了一些变化。现在,它不再是mangleProperties,而是一个“对象”对象中的一个“属性”对象:
这是我从gulpfile.js中获取的完整代码,该代码将于2020年5月开始工作
gulp-uglify
答案 3 :(得分:-3)
嗯,在这种情况下,您可以将images.blank
的所有引用替换为"blank.gif"
,与plus
和minus
相同。虽然如果由于某种原因决定更改所有文件名,这确实意味着更多工作,但没有什么全局搜索和替换无法修复。根本不需要images
对象。