Javascript 闭包编译器忽略对象变异
我将以下代码放在高级模式下的闭包编译器中:Javascript 闭包编译器忽略对象变异,javascript,optimization,google-closure-compiler,Javascript,Optimization,Google Closure Compiler,我将以下代码放在高级模式下的闭包编译器中: var obj = (function() { /** @constructor */ function H(a) { this.a = a } var h = new H(1); h.b=1 return h })(); 我得到的结果是: (function() { var a = new function() { }(1); a.a = 1; return a; })(); 为什么它忽略了我对对象
var obj = (function() {
/** @constructor */
function H(a) {
this.a = a
}
var h = new H(1);
h.b=1
return h
})();
我得到的结果是:
(function() {
var a = new function() {
}(1);
a.a = 1;
return a;
})();
为什么它忽略了我对对象所做的更改?h.b=1?高级编译选项启用,其中包括一些假设: 它强烈假设在“原型”或“此”上定义的属性不会被迭代,因此是删除的候选对象。
/**@构造函数*/
函数cls(){
this.x=1;//由于“this”假设而删除候选项;
}
因此,您看到的实际上是
this.a=a
被删除,然后属性b
被重命名为a
尝试在构造函数中添加this.b=null
。也许它的优化方式忽略了会导致多个隐藏类的代码?@plalx我希望看到它将this.b=1
添加到构造函数中。虽然问题本身是有效的,但请注意