一、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方法。打印如下: