类的继承
- 使用extends进行继承
注意:JavaScript本身不提供“多重继承”功能,毕竟有诸多类似钻石问题的复杂情况,但开发者们还是通过其他方法实现多重继承,比如混入
super关键字用于访问和调用对象父类上的函数,可以调用父类的构造函数,也可以调用父类的普通函数
- 在constructor中,super必须在子类this的之前进行调用,即必须先调用父类的构造函数,再使用子类的构造函数
- super只能在派生类(子类)的构造函数和静态方法中使用
错误写法
class Father {
constructor(x, y){
this.x = x;
this.y = y;
}
sum() {
console.log(this.x + this.y);
}
}
class Son extends Father {
constructor(x, y) {
this.x = x; //会报错
this.y = y; //会报错
}
}
var son = new Son(1, 2);
son.sum(); //会报错
-
类里面的语法中,只要符合类继承 + 子类有个构造函数(constructor)则一定要调用super,否则也会报错
如果只需要继承到x、y的属性,自身不需要新的属性(类似于下方的id属性),则甚至可以不用写构造函数 -
此时参数传递给子类的constructor的x和y,而父类的sum函数用的是父类的constructor的x和y
class Father {
constructor(x, y){
this.x = x;
this.y = y;
}
sum() {
console.log(this.x + this.y);
}
}
class Son extends Father {
constructor(x, y, id) {
//调用父类的构造函数
super(x, y); //并且一定要放在最开头,不能把this.id = id 放在它前面
this.id = id;
}
}
var son = new Son(1, 2, 123);
son.sum(); //success
继承中属性或者方法的查找原则:就近原则