我正在尝试使用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