记录 this._super一个坑

this._super() 调用父类同名函数,是非js官方支持的语法。

混淆代码过后会报错

super.方法名() js 只支持在构造函数,其他方法不支持。 ts才支持全部支持。

后面面试时候我一定会问js和ts super关键字有什么区别,看看有几个人知道这个问题。

只能修改成:
onLoad () {

    父类名.prototype.onLoad.call(this);

},
2赞

什么公司,名字报一下,下一次我肯定答上

反问面试官new.target能干嘛

哈哈哈哈哈无敌了

这个说法不对吧

1赞

image 这个不太对
至于楼主说的this._super()这个方法 有点不多的印象 但是ts中是不能用的吧

this._super跟js/ts没有关系, 是cocos自己实现的.
混淆后会报错, 看了源码就明白怎么回事了: CCClass.js

1赞

明天我把demo 出来吧

TestExtends.zip (226.4 KB)
我把demo上传上来了。

试了一下2.4的结果 不在构造函数里 也是起作用的

还是coco中cc.class的中处理的问题,为了兼容不支持es6的情况,做了些其他操作

因为你在这里用的是Cocos的CCClass实现的继承,而不是js的class和extends关键字实现的继承。
Cocos为了实现this._super的机制,会在CCClass参数中识别到extends后去覆盖子类中和父类共有的方法,这会导致js的关键字super失效。如果正常使用js的class和extends关键字实现继承是不会影响到super的。

具体可以看源码CCClass.js中的boundSuperCalls

是的,所以才有在每一个子类中调用this._super()函数,掉到父类的函数中,原生js中是没有这种功能的

可以,你去他公司面试可以满分

面试的岗位是面试官是吧

对换一个不折磨求职者的 :smile: