2020-09-07Class及其继承

Class基本语法:

class People { // 类名后面无需小括号
constructor(a, b) { //类的构造方法constructor,必须得有,否则会被默认添加,new时自动被调用
this.name = a;
this.age = b;
} // 此处无需逗号
sayName() { // 无function关键字
console.log(this.name);
}
}
var p1 = new People("yuan", 18);
var p2 = new People("qin", 20);
console.log(p1, p2);
console.log(p1.sayName == p2.sayName); // true ,和原型创建方式一样,类的方法都定义在类的原型上
p1.sayName();

Class属性相关知识:
class People {
// 顶层属性:所有实例的属性值一样时可以写在顶层属性里面,这样既节约内存也可以不用多次传参
school = "武汉大学";
_grade = 0;
constructor(a, b) {
    this.name = a;
    this.age = b;
}
sayName() {
    console.log(this.name);
}

// 属性的set存值函数和get取值函数:
set grade(value) {
    this._grade = value;
    console.log(this._grade);
}
get grade() {
    return this._grade + 1;
}
}
var p1 = new People("yuan", 18);

p1.grade = 8; // 给grade属性赋值时,调用set方法(并传递属性值)
console.log(p1.grade);  // 获取grade属性值时,调用get方法(返回值是该属性值)
       

Class的静态方法和静态属性:

class People {
static name="静态name";
constructor(a, b) {
this.name = a;
this.age = b;
}
static sayName() {
console.log(this.name); // 此处的this指的是类
}
sayName() {
console.log(this.name); // 此处的this指的实例对象
}
}
var p1 = new People("yuan", 18);
 console.log(p1.name); // yuan        
    p1.sayName(); // yuan
    
    // 静态属性和方法由类自己调用,实例不会继承(父类的静态方法和静态属性,可以被子类继承)
    console.log(People.name); // 静态name
    People.sayName(); // 静态name

Class的继承:

// 父类People
class People {
static name = "静态name";
static sayName() {
console.log("子类可以继承父类的方法");
}
constructor(a, b) {
this.name = a;
this.age = b;
}
sayName() {
console.log(this.name);
}
}
 // 子类Student继承父类People的属性和方法
    class Student extends People {
        constructor(a, b, c) {
            super(a, b); // 表示父类的构造函数,去构造name和age对象,注意super方法的调用要在this之前
            this.grade = c;
        }
        say(){
            super.sayName(); // 如果想在这里就使用父类的方法,可以通过super对象进行调用,这里的super可以看作是父类的实例
        }
        static stuName=super.name; // 静态属性中的super对象可以看作父类自己
        static  say(){
            super.sayName(); // 静态方法中的super对象可以看作父类自己
        }
    }

    var p1 = new Student("yuan", 18, 7); // 子类的实例,可以继承父类的属性和方法

    console.log(p1.name);
    console.log(p1.age);
    console.log(p1.grade);
    p1.sayName();
    console.log(People.name,Student.name); // "静态name"    子类会继承父类的静态属性
    Student.sayName();  // "子类可以继承父类的方法"  子类会继承父类的静态方法

    p1.say();  // yuan
    Student.say(); // "子类可以继承父类的方法"

你可能感兴趣的:(2020-09-07Class及其继承)