在学习ES6中的继承之前 我们先来了解一下类(class)
- class 是 ES6新增的一个关键字。
如果你学习过其他的编程语言,你就会发现,js是没有类这个概念的。 随着js的发展,class终于在ES6时添加到js中。
基本上,ES6的class可以看到是一个语法糖。 本质上就是一个构造函数。
es6之前的构造函数写法。
function Cat(name,color){
this.name = name;
this.color = color;
}
Cat.prototype.eat = function(){
console.log("吃老鼠");
}
es6之后的写法
class Cat{
// 构造器:之前构造函数中的代码放在这里。
constructor(name,color){
this.name = name;
this.color = color;
}
// 在这里定义的方法就会在原型对象上、
eat(){
console.log("吃老鼠");
}
}
var c1 = new Cat("大毛","灰色");
console.log(c1);
console.log(Cat.prototype.constructor);
那么前面我们已经了解过class的概念了 那么我们来聊聊es6之后的继承吧
ES6实现继承: 使用extends和super关键字。
- 实现继承的步骤 constructor必须要有
1.在子类的类名后 添加 extends 父类名
2.在子类的构造器中,调用super() 相当于调用父类的构造器。
class Son extends Father{
constructor(){
super();
}
}
示例
//定义一个动物类
class Animal{
constructor(type){
// 动物品类
this.type = type;
}
//定义一个睡得方法
sleep(){
console.log("睡一觉");
}
}
//用一个extends关键字实现子类继承父类的属性
class Dog extends Animal{
constructor(name,age){
//相当于调用父类的构造器
super("犬科哺乳动物")
this.name = name;
this.age = age;
}
//定义一个吃的方法
eat(){
console.log(this.name+"吃大骨头");
}
}
var hsq = new Dog("二哈",3);
console.log(hsq);
// console.log(hsq.name);
// console.log(hsq.age);
// hsq.eat();
// console.log(hsq.type);
hsq.sleep();
super:
-
可以当做函数来使用
-
也可以当做对象来使用
当函数来使用:
代表父类的构造函数
【注意】只能在子类的构造器中使用。
【注意】要实现继承,super不能省略
当对象来调用
代表父类的原型对象
**示例**
class Animal{
constructor(type){
// 动物品类
this.type = type;
}
sleep(){
console.log("睡一觉");
}
}
class Dog extends Animal{
constructor(name,age){
//相当于调用父类的构造器
super("犬科哺乳动物")
this.name = name;
this.age = age;
}
eat(){
console.log("吃大骨头");
// console.log(super.type);//undefined 原因是type并没有存在于Animal原型对象上,在animal实例对象中。
super.sleep();
// super("犬科哺乳动物");
}
}
var d = new Dog("二哈",3)
d.eat();