2

编译前:

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'?

4

2 回答 2

2

正如其他人所建议的那样,您必须启用 ADVANCED_OPTIMIZATIONS,如此处所述

需要注意的是,即使使用高级编译,某些属性也不会重命名 - 在常见问题解答中对此进行了详细介绍

于 2013-04-06T09:24:01.667 回答
-2

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

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

于 2013-04-03T20:42:01.020 回答