携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第31天,点击查看活动详情 类的继承 通过关键字extends关键字实现继承。这比ES5的通过修改原型链实现继承,要清晰和方便很多
extends本身就有继承的意思,继承谁,该单词后面就写谁。 super()方法要在子类的constructor()方法第一行写。super实际就是父类的constructor。相当于在子类里面调用了父类,类似于构造函数继承
相当于在子类里面调用父类的constructor,从而使父类的构造函数中的this指向了子类的实例对象。
super关键字
super这个关键字,既可以当作函数使用,也可以当作对象使用。在这两种情况下,它的用法完全不同。
第一种情况,super作为函数调用时,代表父类的构造函数。ES6 要求,子类的构造函数必须执行一次super函数。
class A {}
为什么子类的构造函数,一定要调用super()?
原因就在于 ES6 的继承机制,与 ES5 完全不同。ES5 的继承机制,是先创造一个独立的子类的实例对象,然后再将父类的方法添加到这个对象上面,即“实例在前,继承在后”。ES6 的继承机制,则是先将父类的属性和方法,加到一个空的对象上面,然后再将该对象作为子类的实例,即“继承在前,实例在后”。这就是为什么 ES6 的继承必须先调用super()方法,因为这一步会生成一个继承父类的this对象,没有这一步就无法继承父类。
如果子类里没写constructor,那么new实例的时候会自动调用super和constructor方法