类的基本写法:函数
constructor构造函数其实就至关于ES5中的构造函数,用于定义类的实例属性;this
而在类中定义的其余方法像这里的toString方法就至关于ES5中定义在原型prototype上的共享方法。spa
就是语法糖嘛。prototype
constructor方法对象
这是类的默认方法,类必须有该方法,若是没有显示定义,会默认添加一个空的constructor方法。blog
Class的表达式写法继承
const Father = class Me{} 原型链
其中Me在Class的内部使用,指代当前类,也能够省略掉原型
const Father = class{}class
当即执行的class表达式
不存在变量提高
和let、const这些新增的变量同样,class也是不存在变量提高的,因此必须在定义以后才可使用该类。并且也不能够重复定义。
class的继承
经过使用extends关键字实现继承。这就比ES5写起来简单多了,ES5中要实现继承,得把超集的实例赋给子集的prototype,也就是经过原型链实现。
这样子,Son类经过extends继承了Father类的全部属性和方法,至关于复制了一个Father类。
上面没有显式声明constructor方法,实际上是会默认添加constructor方法,并且里面会调用super函数,至关于下面这样:
也就是说,子类必须在constructor函数中调用super()函数,至关于调用父类的constructor方法,不然在新建实例的时候会出错。
这是由于子类没有本身的this对象,而是经过继承父类的this对象,而后进行修改。Super()函数至关于调用父类的constructor函数,创造了父类的实例对象this,而后就能够用子类的构造函数修改它了。
当就是不调用它的时候
就会报错!
完整的继承写法是这个样子:
还要注意,super()函数调用后,子类才可使用this对象,不然也是会出错的,由于只有调用super()以后,才返回了父类的实例,才可使用this。
像这样是错误的: