缩小对象属性的解决方案?
在我的JavaScript应用程序中,我只将多个对象用于内部目的(用户不需要访问它们)。例如:缩小对象属性的解决方案?
var images={
blank:"blank.gif",
plus:"plus.gif",
minus:"minus.gif"
}
当我使用像Uglify.js一个minifier,属性名(空白,加,减)保持原样。有没有办法缩小它们?
我已经考虑迄今:
- 使用谷歌关闭minifier在高级模式,但这种击碎我的代码
- 替换变量对象的属性(如VAR imagesBlank =“blank.gif”),但它使代码更不可读
有没有更好的方法?
那么,在这种情况下,您可以用"blank.gif"
替换所有对images.blank
的引用,与plus
和minus
相同。虽然这确实意味着更多的工作,如果你出于某种原因决定更改所有文件名,那么没有任何全局搜索和替换无法修复。根本不需要images
对象。
这只是一个例子。在我的代码中,图像链接实际上更长:“http://domainName/hierarchy/blank.gif”。重复该字符串不会解决缩小问题。我可以将它存储在一个变量中,但后来我们回到了我的问题。 – Christophe 2012-02-21 17:15:09
那么,你可以有一个变量'baseimgurl =“http://示例。com/hierarchy /“;'并且只是把它放在你的图片链接上......也许吧。 – 2012-02-21 18:34:12
使用对象允许使用变量作为属性。用封闭包装它使得这些变量值得缩小。
//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
})();
要访问的上方,常数必须闭合内使用的值。
如果使用谷歌的关闭编译器,使用var image = [];
将在宣布所述阵列更有效,因为在属性值被从零计数,即0
,1
,2
。
否则,var image = {};
工作得很好。
如果你唯一地加上你的内部属性的前缀,你可以尝试--mangle-props regex
每https://github.com/mishoo/UglifyJS2。
下面是它在我的gulpfile中的使用,它需要gulp-uglify。
var uglifyOpts = {
// Mangles the private "p1_" prefixed properties in an object
mangleProperties: {
regex: /^p1_/
}
};
*在高级模式下使用Google Closure minifier,但是这会压缩我的代码* ...您应该仔细阅读文档并调整您的代码,使其不会崩溃。我认为Google Closure编译器是最好的选择。 – 2012-02-21 17:05:55
@FelixKling你会有与我的问题有关的特定链接吗?此外,随时发布他们作为答案,以便我可以接受它! – Christophe 2012-02-21 19:53:32
不,不是真的......只有文档(http://code.google.com/closure/compiler/docs/api-tutorial3.html)。 – 2012-02-21 21:07:43