Closure编译器不会虚拟化匿名包装器中包含的原型函数

时间:2011-12-09 09:34:01

标签: javascript google-closure-compiler

我正在尝试使用Google Closure Compiler的高级模式,似乎只有在没有包装在匿名包装器中时才会内联小型简单函数。寻找解释/解决方案或暗示我做错了什么。

这是我的测试:

function Test() {
}
Test.prototype.div = function (index) {
    return Math.floor(index / 32);
};
Test.prototype['test'] = function (index) {
    return this.div(index);
};
window['Test'] = Test;

导致这个小脚本div函数内联

function a() { } 
a.prototype.test = function(b) { return Math.floor(b / 32) }; 
window.Test = a;

接下来,测试包装如下:

(function () { // <-- added
    function Test() {
    }

    Test.prototype.div = function (index) {
        return Math.floor(index / 32);
    };

    Test.prototype['test'] = function (index) {
        return this.div(index);
    };

    window['Test'] = Test;
}()); // <-- added

div功能未内联

(function() { 
    function a() { } 
    a.prototype.a = function(a) { return Math.floor(a / 32) }; 
    a.prototype.test = function(a) { return this.a(a) }; 
    window.Test = a
})();

是否有一些副作用,我不知道这是在阻止内联?

更新1 :我正在使用高级模式+精美打印的online compiler

更新2 :发现命令行参数--output_wrapper可用作解决方法--output_wrapper "(function() {%output%})();"

2 个答案:

答案 0 :(得分:2)

这不是内联,而是原型虚拟化

这是一个众所周知的问题:Closure compiler issue

答案 1 :(得分:0)

没有,除了在编译器中执行此操作之外,没有任何内容阻止内联。