一文-学会es6的class类

本文详细介绍了JavaScript中的类定义和声明,包括构造器、实例方法、访问器方法和静态方法的使用。同时,深入讲解了类的继承机制,如何通过`extends`关键字实现继承,以及`super`关键字的用法,包括属性继承、方法继承和重写。通过对这些概念的掌握,读者可以更好地理解和应用JavaScript的面向对象编程。
摘要由CSDN通过智能技术生成

看完文章会收获满满哦!

 一、类的定义和声明

class Person {}  // 类的声明

const Girl = class {}  // 类的表达式

 二、类中的方法

1.构造器方法

 一个类只能有一个构造函数
 通过new关键字操作类时会调用constructor函数,如果不写也会调用默认的constructor

class Person {

  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
}

const p1 = new Person('wyy',22)
console.log(p1)

2.实例方法--通过创建的实例进行访问

class Person {

  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  // 实例方法
  eating() {
    console.log(this.name, "eating");
  }

}

const p1 = new Person('wyy',22)
p1.eating() // wyy eating

3.访问器方法

 可对类的属性操作进行访问和响应拦截

class Person {

  constructor(name, age) {
    this.name = name;
    this.age = age;
    this._sex = "boy";
  }

  //  类的访问器方法
  get sex() {
    console.log("拦截访问操作");
    return this._sex;
  }
  set sex(newVal) {
    console.log("拦截设置操作");
    this._sex = newVal;
  }

}

const p1 = new Person('wyy',22)
p1.sex = '男'
console.log(p1.sex)

 4.静态方法-通过类名访问

如Promise.all()

class Person {

  constructor(name, age) {
    this.name = name;
    this.age = age;
    this._sex = "boy";
  }

  // 静态方法
  static creatP() {
    console.log("访问了类的静态方法");
  }
}
Person.creatP();

三、类的继承

类的继承使用extends关键字

class Boy {}
class Student extends Boy {}

super:调用父类的构造器函数

注:在子类的构造函数中在使用this之前必须调用父类的构造方法(super)

        使用位置:子类(派生类)的构造函数,实例方法,静态方法

1.继承父类的属性 

// 类的继承
class Boy {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

}

class Student extends Boy {
  constructor(name, age, sno) {
    super(name, age); //调用父类的构造函数
    this.sno = sno;
  }
}

const s1 = new Student("hhh", 18, "2339929");
console.log(s1);  

2.继承父类的方法

class Boy {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  say() {
    console.log(this.name, "say");
  }

}

class Student extends Boy {
  constructor(name, age, sno) {
    super(name, age); //调用父类的构造函数
    this.sno = sno;
  }

//定义子类内部自己的方法
  study() {
    console.log(this.name, "study");
  }
}

const s1 = new Student("hhh", 18, "2339929");
s1.say(); //方法的继承

3.对父类方法进行重写

如果对父类的方法不满意时,可根据需求进行重写

3.1 完全重写

class Boy {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  say() {
    console.log(this.name, "say");
  }

}

class Student extends Boy {
  constructor(name, age, sno) {
    super(name, age); //调用父类的构造函数
    this.sno = sno;
  }

  say() {
    console.log(this.name, "子类重写say");
  }
}

const s1 = new Student("hhh", 18, "2339929");
s1.say(); 

3.2 部分重写-通过super关键字实现

class Boy {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  say() {
    console.log(this.name, "say1");
    console.log(this.name, "say2");
    console.log(this.name, "say3");
  }

}

class Student extends Boy {
  constructor(name, age, sno) {
    super(name, age); //调用父类的构造函数
    this.sno = sno;
  }

  say() {
    super.say()
    console.log(this.name, "子类重写say1");
    console.log(this.name, "say2");
  }
}

const s1 = new Student("hhh", 18, "2339929");
s1.say(); 

3.3 对静态方法进行重写

class Boy {

  static sum() {
    console.log("static静态方法");
  }
}

class Student extends Boy {

  //   重写静态方法
  static sum() {
    super.sum();
    console.log("子类的静态方法");
  }
}

Student.sum();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值