Class类的使用和介绍

33 阅读2分钟

简言

类是用于创建对象的模板。它们用代码封装数据以对其进行处理。JS 中的类建立在原型之上,同时还具有一些类独有的语法和语义。在javascript中的Class类是一种创建对象的方法,它通过定义类来描述对象的属性和方法,通过实例化类来创建具体的对象。

类的使用场景

  1. 创建对象: 使用Class类可以方便的创建,从而避免使痛传统的函数或原型链方式创建对象的繁琐。
  2. 继承: 可以在子类中重用父类的属性和方法,同时还能扩展自己的属性和方法。
  3. 封装:使用Class类将属性和方法封装在类中,从而实现数据的行为隔离,提高代码的可维护性和安全性。
  4. 实现接口:使对象在实现某些特定的功能时遵循规范。

总而言之,使用 Class 类可以使代码更加结构化、易读、易维护,同时还可以提高代码的可复用性和扩展性。

Class类简单的例子

// 创建一个Person类
class Person {
 // 构造器方法
 constructor(name, age){
    this.name = name
    this.age = age
 }

 // 实例方法
 speak() {
  console.log(`我叫${this.name}, 今年${this.age}岁`)
 }
 
 // 静态方法
 static plaseSpeak() {
    consoloe.log(`你好啊${this.name}`)
 }
 
// 创建一个Person的实例对象
const p1 = new Person('tom', 18)

// 调用实例
p1.speak() // 我叫tom, 今年18岁

// 调用静态方法
Person.plaseSpeak() // 你好啊tom
}

Class类 标准版本

class MyClass {
  // 静态属性
  static staticProperty = '静态属性';

  // 构造函数
  constructor(prop) {
    // 私有属性
    this.#privateProperty = prop;
    // 公共属性
    this.publicProperty = '公共属性';
  }

  // 私有属性
  #privateProperty;

  // 静态方法
  static staticMethod() {
    console.log('这是一个静态方法');
  }

  // 公共方法
  publicMethod() {
    console.log('这是一个公共方法');
    // 调用私有方法
    this.#privateMethod();
  }

  // 私有方法
  #privateMethod() {
    console.log('这是一个私有方法');
  }

  // Getter 方法
  get privateProperty() {
    return this.#privateProperty;
  }

  // Setter 方法
  set privateProperty(value) {
    this.#privateProperty = value;
  }

  // 公共静态方法
  static publicStaticMethod() {
    console.log('这是一个公共静态方法');
  }
}

// 调用静态属性和静态方法
console.log(MyClass.staticProperty); // 输出:静态属性
MyClass.staticMethod(); // 输出:这是一个静态方法

// 创建实例并调用公共方法和 Getter/Setter 方法
const myObj = new MyClass('私有属性');
console.log(myObj.publicProperty); // 输出:公共属性
myObj.publicMethod(); // 输出:这是一个公共方法,这是一个私有方法
console.log(myObj.privateProperty); // 输出:私有属性
myObj.privateProperty = '新的私有属性';
console.log(myObj.privateProperty); // 输出:新的私有属性

// 调用公共静态方法
MyClass.publicStaticMethod(); // 输出:这是一个公共静态方法

这个示例代码展示了以下 Class 相关知识点:

  • 静态属性和静态方法:通过 static 关键字声明静态属性和静态方法,并且可以通过类名直接访问。
  • 构造函数:使用 constructor 关键字定义构造函数,用于创建实例对象并初始化属性。
  • 私有属性和方法:通过在属性或方法名前面加上 # 符号定义私有属性和方法,外部无法直接访问和调用,只能在类内部使用。
  • Getter 和 Setter 方法:使用 get 和 set 关键字定义 Getter 和 Setter 方法,用于控制类的属性访问和修改。
  • 公共方法:定义在类中的公共方法可以被实例对象访问和调用。
  • 公共静态方法:使用 static 关键字定义公共静态方法,可以通过类名直接调用。

Class类继承

// 父类
class Person {
 // 构造器方法
 constructor(name, age){
    this.name = name
    this.age = age
 }
 speak() {
  console.log(`我叫${this.name}, 今年${this.age}岁`)
 }
}

// 子类
class Student extends Person {
    constructor(name, age, grade) {
        super(name, age) // 要放在前边
        this.grade = grade
    }
    speak() {
      console.log(`我叫${this.name}, 今年${this.age}岁, 今年${this.grade}了`)
     }
    study() {
        // study方法放在,类的原型对象上,供实例使用
        // 通过Student实例调用study时, study中的this就是Student实例
        console.log('我很努力的学习!')
    }
}


const s1 = new Student('小张', 15, '高一')
s1.study() // 我很努力的学习!
s1.speak() // 我叫小张, 今年15岁, 高一了

总结:

  • 类中的构造器不是必须写的,要对实例进行一些初始化的操作, 如添加指定属性时才写
  • 如果A类继承了B类,且A类中写了构造器, 那么A类构造器中的super是必须要调用的
  • 类中所定义的方法,都是放在了类的原型上, 供实例去使用

参考文章: www.kancloud.cn/wangjiachon…