压缩' public'身份标识

时间:2013-04-03 20:22:53

标签: javascript google-closure-compiler

编译前:

function Foo(){
    this.init = function(){
        var bar = new Bar();
        bar.init();
    };
}

function Bar(){
    this.init = function(){
        console.log('Hello');
    };
}

$(window).load(function(){
    var foo;
    foo = new Foo();
    foo.init();
});

运行闭包编译器和格式化之后:

function Foo(){
    this.init=function(){
        (new Bar).init()
        }
    }

function Bar(){
    this.init=function(){
        console.log("Hello")
        }
    }

$(window).load(function(){
    (new Foo).init()
    });

如何让编译器压缩'init'标识符,所以我们有例如'a'而不是'init'?

2 个答案:

答案 0 :(得分:2)

正如其他人所建议的那样,您必须启用ADVANCED_OPTIMIZATIONS,记录为here

有一点需要注意,即使使用高级编译,也不会重命名某些属性 - 在FAQ中详细介绍

答案 1 :(得分:-2)

你不想这样做。 init是一种公共方法。调用init的代码期望将其命名为{{1}}。想象一下,如果你想使用jQuery的压缩版本,但所有的方法名称都被缩小了。 “.each()的简称是什么?”它当然可以完成,但它会适得其反,并且会使代码的可靠性失效。

另一个简短的轶事是谷歌地图JavaScript API缩小版。 LatLng对象的属性被缩小为$ a和$ b。我直接引用了这些属性来访问纬度和经度值。然后Google重建了该文件,并将属性名称更改为其他内容!我使用API​​文档来查找具有一致的预期名称的公共方法,而不是引用缩小的属性:getLatitude()和getLongitude()。这些方法通过缩小的名称引用内部属性,并简单地返回它们的值。如果方法名称包含在缩小中,我将回到最初的问题。