引擎版本: 3.8.4
一个很简单的项目…打包之后就报了奇怪的异常…全是堆栈爆炸…
简单调查之后发现原因在这里…

ts里的super.value…在js里变成this.value了…
结果就是this.value里面给this.value赋值…那就死循环了…

预览的时候js还是es6的…有super关键字…不会出现这个问题…
估计打包成es5之后才会这样…

(方法里面还是支持super的…)
class A {
_value = 'A';
get value() {
console.log("[A] get value", this._value);
return this._value;
}
set value(value) {
console.log("[A] set value", value);
this._value = value;
}
}
class B extends A {
__value = 'B';
get value() { return super.value; }
set value(value) {
console.log("[B] set value", value);
this.__value += value;
super.value = value;
}
}
window['test'] = function () {
const b = new B();
console.log(b._value); // A
console.log(b.__value); // B
b.value; // [A] get value A
b.value = 'C'; // [B] set value C [A] set value C
b.value; // [A] get value C
console.log(b.__value); // BC
}
(直接用es6测试也没有问题)
这个和js的es5的原型链有关系…因为es5中方法是存在原型上的…而属性是存在实例对象上的…所以会在构造的时候被子类覆写掉…也无法找到父类的属性…
而es6本身就支持了get/set/super关键字…应该是用了其他的方案来实现属性的…所以就可以了…
所以目前只能改一下方案了…把get/set的逻辑搬到方法上就可以了…

