简单的TS继承无法使用


就是像这样一段代码,在各种环境下运行输出结果都是 {xx:“123”}
但在cocos中,输出就是 {xx:undefined}
不理解这是搞了什么魔法?

语言支持 | Cocos Creator

cocos的 ts 是4.1的
override 在4.3才支持。
TypeScript: Documentation - TypeScript 4.3

你可以看一下cocos生成的js代码~ 还有很多ts特性cocos不支持 。
你在ide下写代码 ,语法提示是取决于你ide环境中的ts版本,而编译运行cocos用的自己打包的。

编辑掉了:没事了,cpp和ts不一样,ts 居然真的能在基类的构造函数里面调子类的虚函数。后来想了一下js的prototype机制,确实也是可能的。
不过一般也挺少那么调用的,因为在逻辑上和原则上,尽量不会在构造函数里面调虚函数,我也一直没有实际去用这种情况,所以还是惊讶了一下。

你是说CPP 不支持这个?

对,cpp 在类a的构造函数里面,调用的init,是a类里面的,而不是b类里面的。因为b的虚函数表这个时候没构造。

这算啥特性。。。没有ts的时候,直接手撸js也是能赋值的


找到了cocos的编译结果~ 这就很尴尬了~

那估计是tsc编译的,cocos哪有那个能力做编译

你尝试 给xx个默认值?


高版本tsc,结果也是如此

其实就是不建议在构造函数里面用虚函数。
我也对比了其他语言,例如c#,java之类的。子类的成员变量,也都是在基类构造函数执行完才初始化的,这时候用虚函数,子类是不完全的状态。
这也符合面向对象的逻辑。

跟编译设置有关~

比较喜欢脚本的“语法糖”~ 轻松愉快~
不允许倒也不是不能接受,略蛋疼咯

为啥叫语法糖,因为吃多了可能得糖尿病 :crazy_face: