ES6类的继承

94 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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方法

私有属性和私有方法的继承 

静态属性和静态方法的继承

Object.getPrototypeOf(子类名字),返回值就是父类的名字。