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
添加到构造函数中。虽然问题本身是有效的,但请注意