一、class的几点特性。
ES6可以用class关键字来定义一个类。可以有下面几点特性:
- 用class定义类,用constructor来定义类的构造方法。
- 用new关键字创建类的实例。
- 用extends关键字实现类的继承。
- 通过super关键字调用父类的构造方法。
- 可以重新父类的一般方法。
二、class定义的类和function定义的方法比较。
function Person1(name,age) { this.name = name; this.age = age; this.showName = function () { console.log(this.name); } } let person1 = new Person1("zhangsan",23); console.log(person1); person1.showName();//打印 zhangsan class Person2 { //类的构造方法 constructor(name,age){ this.name = name; this.age = age; } //类的一般方法 showName(){ console.log(this.name); } } let person2 = new Person2("zhangsan",23); console.log(person2); person2.showName();
上面Person1、Person2 功能都是一样的。打印如下:
有一点不一样的是通过class定义的Person2的一般方法showName()方法是显示在原型中的。通过function定义的Person1的showName()方法是在function内部。如下所示:
三、class的继承和方法重写。
class Person2 { //类的构造方法 constructor(name,age){ this.name = name; this.age = age; } //类的一般方法 showName(){ console.log(this.name); } } let person2 = new Person2("zhangsan",23); console.log(person2); person2.showName(); class Child extends Person2 { constructor(name,age,sex){ super(name,age); //调用父类的构造方法 this.sex = sex; } //类的一般方法 showName(){ console.log(this.name,this.sex); } } let child = new Child("lisi",23,'男'); console.log(child); //如果子类不重写,调用父类的showName方法。 //子类重新就调用子类的showName方法。 child.showName();
如果子类不重写showName()方法,调用父类的showName()方法。子类重新就调用子类的showName方法。打印如下: