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

我正在尝试使用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%})();”.

最佳答案 这不是内联,而是原型虚拟化

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

点赞