缩小对象属性的解决方案?

时间:2012-02-21 17:02:08

标签: javascript object minify

在我的JavaScript应用程序中,我使用多个对象仅用于内部目的(用户不需要访问它们)。例如:

var images={
    blank:"blank.gif",
    plus:"plus.gif",
    minus:"minus.gif"
}

当我使用像Uglify.js这样的缩小器时,属性名称(空白,加号,减号)保持不变。有没有办法缩小它们?

到目前为止我所考虑的事项:

  • 在高级模式下使用Google Closure minifier,但这会破坏我的代码
  • 用变量替换对象属性(例如var imagesBlank =“blank.gif”),但它使代码不易阅读

有更好的方法吗?

4 个答案:

答案 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 = [];会更有效地声明数组,因为属性值从零开始编号,即012

否则,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",与plusminus相同。虽然如果由于某种原因决定更改所有文件名,这确实意味着更多工作,但没有什么全局搜索和替换无法修复。根本不需要images对象。