我正在尝试使用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%})();"
。
答案 0 :(得分:2)
这不是内联,而是原型虚拟化
这是一个众所周知的问题:Closure compiler issue
答案 1 :(得分:0)
没有,除了在编译器中执行此操作之外,没有任何内容阻止内联。