类的继承
通过关键字:super
代码示例:
{
//父类
class Father{
constructor(name){
this.name = name;
this.hobby = "抽烟,喝酒,烫头"
}
yue(){
console.log("去你的吧!");
}
}
let father = new Father("于谦");
console.log(father.name);
father.yue();
//子类
class Student extends Father{
constructor(name,age){
super(name);
this.age = age
}
yue(){
console.log(`我叫${this.name},爱好是${this.hobby}`);
}
}
let student = new Student("郭小宝",8);
student.yue(); //我叫郭小宝,爱好是抽烟,喝酒,烫头
}
上述代码中:
- 子类通过 extends 关键字来继承父类的所有属性和方法
- 子类必须在constructor中调用super方法,否则新建实例会报错;
ES5的继承中,实质是先创造子类的实例对象this,然后再将父类的方法/属性添加到this上面。
ES6的继承中,实质是先创造父类的实例对象this, 然后再将子类的方法/属性添加上
必须先通过父类的构造函数完成塑造(this对象–实例对象),然后再对其加工,加上子类自身的属性和方法。
如果不调用super方法,子类就得不到this对象
静态方法
- 有 static关键字,表明该方法是一个静态方法
- 需要通过类名来调用, 而不是在实例(this)上调用
- 如果使用this调用,或者在该方法中使用this。 均会出现异常
- 静态方法可以和非静态方法重名 (不推荐这样)
- 父类的静态方法,可以被子类继承
代码示例:
{
class Person{
//实例属性的新写法, 位置放在类的顶部
num = "我是实例属性的新写法";
// 静 态 属 性
// 写法: 在实例属性前, 加static关键字
static Admin = "开机密码";
constructor(name,age){
this.name = name;
this.age = age;
}
static MiMa = "1906"
static shuo(){
console.log("保密保密")
}
talk(){
return `${this.num}`
}
}
Person.shuo();//保密保密
console.log(Person.MiMa);
// let person = new Person("光达",18)
// person.shuo(); //person.shuo is not a function
// console.log(person.MiMa); //undefined
// console.log(person.talk()); // 我是实例属性的新写法
}