ES6中的class可以看作是一个语法糖,他的绝大部分功能,ES5都 可以做到,新的class写法只是让对象原型的写法更加的清晰,更加的面向对象编程的语法而已
ES5继承:
基本思想:利用原型链糖一个引用类型继承另一个引用类型的属性和方法(即通过prototype和构造函数实现)
实质:
将父类添加到prototype原型对象上;
ES6继承:
基本思想:通过exttends关键字实现继承,资料类可以继承父类中所有的方法和属性,子类必须在constructor方法中调用super方法,因为新建的子类没有自己的this对象,而是继承了父类的this对象;
实质:
利用extends关键字继承父类,然后继承父类的属性和方法
使用:
1.解决了代码的复用性;
2.使用extends关键字实现继承
3.子类可以继承父类中所有的方法和属性;
4.子类只能继承一个父类(单继承),一个父类可以有多个子类
5.子类的构造方法中必须有super()来指定调用父类的构造方法,并且位于子类构造方法中的第一行,
6.子类中如果与父类相同的方法和属性,将会优先使用子类的(覆盖)
class People {
//父类的构造方法
constructor(type) {
this.tyep = type;
}
//构造函数上的原型方法
sleep() {
console.log("每天睡一觉");
}
}
//Class通过 extends 关键字实现继承。
//Teacher 继承People父构造函数
class Teacher extends People {
constructor(name, age) {
//调用父类的构造器,必须存在,且位于子类构造器第一行的位置
super("人民教师")
this.name = name;
this.age = age;
}
eat() {
console.log("学习使我快乐");
}
}
let a = new Teacher("张三", 20);
//可以实例对象访问到原型对象上的type;
console.log(a);
console.log(a.name);
a.sleep()