我将以下代码放入高级模式的闭包编译器中:
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
所做的更改?
答案 0 :(得分:1)
高级编译选项启用aggressive property removal,其中包括一些假设:
它强烈假设在"原型上定义的属性"或者"这个"将不会迭代,因此是删除的候选人。
/** @constructor */ function cls() { this.x = 1; // removal candidate due to "this" assumption; }
因此,您实际看到的this.a = a
被删除了,然后将b
属性重命名为a
。